火狐安装 xpi 必须有 browser_specific_settings.gecko.id,缺失时 AMO/临时加载 都直接拒绝并把原因笼统地报成「the add-on is corrupt / 插件损坏」。 用户实测装不上,zip 本身 CRC 完好、文件齐全,根因就是这一项缺失。 顺手把 strict_min_version 定到 102(contentScripts.register 需要的最低线)。
JianF Nav Sync — 浏览器扩展
将浏览历史同步到自建导航门户,按总访问频次自动排序「常用服务」与「历史访问」。
安装
Chrome / Edge(MV3)
- 打开
chrome://extensions/ - 开启右上角「开发者模式」
- 点「加载已解压的扩展程序」,选择本目录的
chrome/文件夹 - Edge 同理:
edge://extensions/
Firefox(MV2)
- 打开
about:debugging#/runtime/this-firefox - 点「临时加载附加组件」,选择本目录
firefox/下的manifest.json - 长期使用:
web-ext build打包后到about:addons安装
iOS / 手机浏览器
系统浏览器扩展 API 不适用于 iOS Safari 普通网页。可用备选:
- iOS Safari Web Extension(需 Xcode 工程封装)
- Android 上使用 Kiwi / Yandex 等支持 MV3 的浏览器加载
chrome/
配置(点击扩展图标)
| 字段 | 说明 |
|---|---|
| 导航服务地址 | 你的门户根地址,如 https://nav.example.com(不要带 /search 等路径) |
| 同步令牌 | 服务端环境变量 NAVI_SYNC_TOKEN 的值(服务端开启鉴权时必填) |
| 设备名称 | 可选,留空则自动检测。Firefox 版按 UA 识别(desktop-firefox / mobile-* / desktop-edge 等);Chrome 版的 MV3 service worker 里没有 navigator,只能回退为 desktop-browser(需要区分设备时请手填) |
行为
- 每 30 秒用
chrome.history.search拉取最近 2 小时新记录(不依赖 onVisited 事件,MV3 休眠也可靠) - 本地过滤:搜索引擎域名、
/search?q=结果页、chrome://、about:等一律不上传 - 同一网址 10 分钟内去重、同批 URL 去重
- 仅在有待同步数据时发 POST(无空轮询)
- 同步失败自动保留队列,下轮重试
- 上报带
Authorization: Bearer <token>;门户「常用服务/历史访问」按total_visits自动更新
技术细节
- Chrome/Edge: Manifest V3,service worker +
chrome.alarms(最小周期 30s) - Firefox: Manifest V2,event page(
persistent: true)+browser.alarms - 存储:
storage.local(pending 队列 + 配置) - API:
history.search+alarms+runtime.onMessage visit_count上报的是 Chrome/Firefox history API 的绝对累计值,不是增量。 服务端(history-server)按设备取绝对值再求和,所以重复上报不会把计数放大。- 两个目录的
background.js不是同一份文件:Firefox 额外做设备名识别 (MV2 常驻后台,navigator可用),并过滤moz-extension://。 改动时两边都要改,但不要直接整份覆盖。