【免费下载链接】tab-out
Keep tabs on your tabs. Turn your "New tabs" page into a mission control, so you can close them easily. Built for people who open too many tabs and never close them.
Tab Out 是一款免费的 Chrome 标签页管理插件,它把新标签页变成一块"标签任务控制台":所有打开的标签自动按域名分组,而 Gmail、X、LinkedIn 等网站的首页则被单独收进一张Homepages 卡片,方便你一键清理。为什么偏偏是这几个网站?卡片顺序又是怎么排出来的?本文结合源码,完整解析 Tab Out 的域名分组与优先级排序逻辑,新手也能轻松看懂。
一、Tab Out 是什么:给"标签狂魔"准备的仪表盘 🧰
Tab Out 用一张干净的网格仪表盘替换你的新标签页:打开一个新标签,就能看到自己所有已打开的标签,按域名聚合成一张张"任务卡片"。
它的核心能力包括:
- 按域名分组:一眼看清在哪些网站上"开了多少页"
- Homepages 专属卡片:Gmail、X、YouTube、LinkedIn、GitHub 的首页被单独归入一张置顶卡片
- 重复标签检测:同一页面开了两次会打上
(2x)徽标,支持一键只保留一份 - 稍后再看:关闭前把标签存进右侧清单,数据保存在本地
- 100% 本地运行:没有服务器、没有账号、不向外发送任何数据
它通过 extension/manifest.json 中的newtab覆盖实现"打开新标签页 = 打开 Tab Out",整个仪表盘由 extension/app.js 驱动。功能全貌可参考 README.md。
二、基础层:标签是如何被按域名分组的
每个标签被归组时,Tab Out 先从 URL 中取出主机名(hostname),比如https://mail.google.com/...对应mail.google.com。
随后它会查一张"友好域名映射表",把冷冰冰的主机名翻译成人类能看懂的名字——mail.google.com显示为 Gmail、old.reddit.com显示为 Reddit。这张表定义在 extension/app.js 的FRIENDLY_DOMAINS中,覆盖了 X、YouTube、Stack Overflow、ChatGPT、Slack 等常见站点。
几个容易忽略的细节:
- 本地开发页面:
localhost标签会带上端口号显示,方便区分不同的 vibe coding 项目 - 本地文件:
file://开头的页面统一归入 "Local Files" 分组 - 浏览器内部页面:
chrome://、扩展页面、about:blank等会被直接过滤,不进入仪表盘
三、Homepages 卡片:为什么要把 Gmail、X、LinkedIn 单独拎出来?
这是整个设计里最关键的问题。
想象一下:你在 Gmail 里打开了 20 封邮件,又顺手开着 Gmail 主页。如果 Tab Out 只按域名分组,这 21 个标签会挤在同一张 Gmail 卡片里。当你想"清掉这个首页"时,按钮却叫"关闭全部 21 个标签"——误伤率极高。
Tab Out 的解法:把"首页/落地页"从内容页里抽出来,单独组成一张 Homepages 卡片。判断逻辑在 extension/app.js 的isLandingPage()函数中,它逐条比对一份LANDING_PAGE_PATTERNS规则表。
四、5 条默认判定规则逐条拆解
规则表定义在 extension/app.js,默认共 5 条:
| 网站 | 匹配域名 | 判定条件 | 为什么这样判定 |
|---|---|---|---|
| 📧 Gmail | mail.google.com | URL 中不含#inbox/、#sent/、#search/ | 只有"还没开始处理邮件"的 Gmail 主页才算首页;一旦进入收件箱、已发送或搜索结果,就是"正在干活"的内容页,留在 Gmail 域名组 |
| 🐦 X | x.com | 路径精确等于/home | 只把 X 的首页/home收进卡片,推文详情页和话题页仍留在 X 组 |
www.linkedin.com | 路径精确等于/ | 只认站点根路径,信息流文章、消息页不算首页 | |
| 🐙 GitHub | github.com | 路径精确等于/ | 同上,仓库和 PR 页面留在 GitHub 组 |
| ▶️ YouTube | www.youtube.com | 路径精确等于/ | 只收首页,正在看的视频页保留在 YouTube 组 |
匹配方式支持两种:精确主机名(hostname)和后缀匹配(hostnameEndsWith,用于通配子域名),再配合路径前缀(pathPrefix)、精确路径(pathExact)或自定义测试函数(test)——Gmail 那条用的就是自定义测试函数。
这套组合拳的意义是:把"你反复路过却从不真正停留"的首页页面聚到一处,让它们成为清理的首选目标。
五、优先级排序:卡片顺序是怎么排出来的?
分组完成后,卡片不是随便摆的。extension/app.js 中的排序函数实现了三级优先级:
- 第一级:Homepages 卡片永远置顶(内部标识为
__landing-pages__) - 第二级:出现落地页规则的"重点域名"排前——即 Gmail、X、LinkedIn、GitHub、YouTube 这些站的内容卡片紧随其后
- 第三级:按标签数量降序——开得最多的域名排最前,最直观地暴露"标签重灾区"
所以打开新标签页时,你最先看到的永远是:Homepages → 重点网站 → 剩余网站按标签数递减。清理节奏从最安全的"首页"开始,一路清到数量最多的域名,非常顺手。
六、一个关键细节:关闭 Homepages 卡片为何不会误伤邮件 ⚠️
这里有个容易被忽略但至关重要的设计。
普通域名卡片点"Close all"时,走的是按主机名匹配关闭(closeTabsByUrls):只要主机名对得上就关,速度快且不怕卡片快照过期。
但 Homepages 卡片和自定义分组是跨域面的集合,主机名匹配会误杀,所以改走按完整 URL 精确匹配关闭(closeTabsExact),见 事件处理逻辑:
关闭 Homepages 卡片 = 只关这几个首页本身,绝不会把你正在读的 20 封 Gmail 邮件或 X 推文一起带走。
源码注释里写得很直白:closing "Gmail inbox" doesn't also close individual email threads。
七、进阶玩法:加入你自己的 Homepages 和分组规则 🎨
默认的 5 条规则只是起点。Tab Out 预留了本地个人配置文件config.local.js(该文件被 gitignore,不会进仓库),由 extension/index.html 在加载主逻辑前引入,文件不存在也完全没影响。
它支持两类扩展:
LOCAL_LANDING_PAGE_PATTERNS:把你自己高频首页(比如公司内网、某博客)追加进 Homepages 卡片,字段与内置规则一致LOCAL_CUSTOM_GROUPS:自定义分组规则——合并子域名、按路径拆分等,命中的标签会归入你命名的独立卡片,并同样享受"精确 URL 关闭"保护(匹配逻辑见 extension/app.js)
示例(放在仓库根目录下的extension/config.local.js):
window.LOCAL_LANDING_PAGE_PATTERNS = [ { hostname: 'blog.example.com', pathExact: ['/'] } ];八、小结
Tab Out 的 Homepages 卡片不是简单的"白名单",而是一套三层协作的机制:
| 层次 | 机制 | 价值 |
|---|---|---|
| 识别层 | LANDING_PAGE_PATTERNS逐条判定首页 | 把"路过型"页面从"干活型"页面中分离 |
| 排序层 | 三级优先级排序 | 首页置顶、重点域名靠前、重灾区显眼 |
| 保护层 | 精确 URL 关闭 vs 主机名关闭 | 清理首页时零误伤 |
理解这套域名分组与优先级排序逻辑后,你会明白:为什么 Homepages 卡片永远是第一张、为什么 Gmail 进了收件箱就不再算首页、为什么关闭它永远安全。而借助config.local.js,这套逻辑还能按你的浏览习惯自由扩展,把 Tab Out 真正调教成自己的"标签任务控制台"。
【免费下载链接】tab-out
Keep tabs on your tabs. Turn your "New tabs" page into a mission control, so you can close them easily. Built for people who open too many tabs and never close them.
相关推荐
让普通显卡也能畅玩AI视频生成:ComfyUI-FramePackWrapper完全指南
让普通显卡也能畅玩AI视频生成:ComfyUI FramePackWrapper完全指南 还在为AI视频生成需要高端显卡而烦恼吗?ComfyUI FramePa
人工智能大模型媒体生成视频JavaScript 逻辑运算符优先级实战:`null || 2 && 3 || 4` 为什么输出 3
JavaScript 逻辑运算符优先级实战: null || 2 && 3 || 4 为什么输出 3 本篇文章以 1 js/02 first steps/11
文档/教程前端TabNine代码补全优先级算法:理解建议排序逻辑
TabNine代码补全优先级算法:理解建议排序逻辑 作为开发者,你是否曾经疑惑为什么TabNine(代码补全工具)会优先推荐某些代码建议?为什么在相似上下文中,
开发工具AI 应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考