最近折腾 Firefox 新标签页,想要的功能很简单:放一些自己添加的网站快捷方式,别根据浏览记录自动往里面塞网站。
结果发现,Firefox 原生新标签页会把常访问的网站补进来。关闭“快捷方式”又会把整排隐藏,自己添加的也一起没了。
后来找到 Chrome 扩展 More Shortcuts New Tab,布局和功能比较符合我的需求,但在火狐扩展商店里没找到同名版本。于是看了下它的开源代码,干脆做了个 Firefox 适配版。
源码与许可
项目地址:More-Shortcuts-New-Tab
采用 MIT 许可,修改和分发时保留原作者版权及许可声明。此次基于仓库里的 2.1.19 版本适配,并不是原作者发布的官方 Firefox 版。
主要改了什么
页面本身是 HTML、CSS、JavaScript,基本可以沿用。主要改浏览器接口:
- 将存储和运行时调用改为 Firefox 的 browser.* 接口。
- 搜索改用 browser.search.search(),在当前标签页使用 Firefox 默认搜索引擎。
- 移除 Chrome 专用的 favicon 权限及 /_favicon/ 接口,保留网络图标获取和字母图标回退。
- 添加 Firefox 扩展 ID、最低版本及数据传输声明。
- 将一处动态 innerHTML 改为创建 DOM 节点并设置 textContent。
手动添加快捷方式、拖动排序、壁纸、主题、导入导出等功能沿用原项目,最多支持30个快捷方式,不读取浏览历史自动添加网站。
不过它并非完全离线:搜索建议仍请求 Google,网站图标可能请求 Google/DuckDuckGo,自动获取标题也会访问所添加的网站。
临时加载很简单,长期安装需要签名
先解压扩展包,在 Firefox 打开:
about:debugging#/runtime/this-firefox
点击“临时载入附加组件”,选择 manifest.json 即可测试。但这种安装在 Firefox 重启后会失效。
想在普通正式版 Firefox 中长期使用,可以申请 Mozilla 签名,不必公开上架,也不需要自己搭建网站。
流程是:
- 登录 Mozilla 扩展开发者中心。
- 点击“提交新附加组件”。
- 分发方式选择 “由您自己托管”。
- 上传 ZIP,manifest.json 要在压缩包根目录。
- 选择桌面端 Firefox。
- 根据实际情况回答是否使用了压缩、混淆或构建工具。
- 提交后等待签名,完成后下载签名的 .xpi。
签名后的文件可以在 about:addons 中,通过齿轮菜单里的“从文件安装附加组件”安装。官方提交说明
踩了一个命名坑
最开始为了区分版本,名称写成了:
More Shortcuts New Tab — Firefox
本地 web-ext lint 没报错,上传后却被 Mozilla 拦住,提示:
附加组件名称不得包含 Mozilla 或 Firefox 商标。
去掉 Firefox 字样,改成:
More Shortcuts New Tab — Personal Edition
重新上传后,自动校验通过,没有错误或警告。
所以本地检查通过,不代表服务端的校验也一定通过。
目前进度
JavaScript 语法检查、搜索接口测试和扩展静态检查已通过,Mozilla 上传校验也已通过,目前页面显示 “等待版本签名”。
完整的 Firefox 界面和功能测试还没做完,因此暂时不把它当成成熟发行版。等签名下来,再继续验证保存快捷方式、拖动排序、壁纸和导入导出。
如果你也只是不想让 Firefox 首页自动补充浏览历史,可以考虑现成的新标签页插件;如果刚好有喜欢的开源 Chrome 扩展,移植到 Firefox 也是一条路,只是需要逐项检查浏览器接口和签名要求。