Bookmark Checker 是一个完全在本机运行的 Chrome 书签有效性检测工具。将 Chrome 导出的 bookmarks.html 拖入窗口,即可批量检查失效、超时、需要登录及服务器异常的链接。
技术栈:Electron、Vue 3、TypeScript、Vite、pnpm、Cheerio。
- 拖拽或点击选择 Chrome/Netscape Bookmark HTML
- 解析书签名称、URL、多层文件夹、
ADD_DATE和LAST_MODIFIED - 规范化 URL 后去重,同时保留用户的原始 URL
- 在 Electron 主进程中通过 Node.js HTTP/HTTPS 检测,不受浏览器 CORS 影响
- 优先发送 HEAD 请求,异常时自动尝试 GET
- 跟随最多 10 次重定向,并记录最终 URL
- 支持 5、10、20、30 并发
- 支持 5、10、15、30 秒请求超时
- 实时显示进度、速度、平均响应时间和分类统计
- 支持开始、暂停、继续和停止检测
- 按名称、URL、文件夹路径搜索
- 通过统计卡片和快捷按钮按状态筛选
- 结果列表独立滚动,所有结果一次性展示
- 一键复制书签名称
- 导出异常结果 CSV、异常书签 HTML 和全部结果 CSV
- 自动保存最近 10 次完整检测结果,重新打开软件后可直接查看
所有书签和历史记录均保留在本机,不会上传至任何第三方服务。
| 检测结果 | 判断方式 |
|---|---|
| 正常 | 最终响应为 HTTP 2xx,或重定向后最终成功 |
| 需登录 | HTTP 401、403 |
| 失效 | HTTP 404、410、DNS 失败、连接被拒绝、网络不可达等 |
| 超时 | 请求超过配置的超时时间 |
| 服务器异常 | HTTP 5xx |
部分网站不支持 HEAD,因此非正常 HEAD 响应会使用 GET 再检测一次,降低误判率。
- 在 Chrome 打开书签管理器。
- 选择“导出书签”,得到
bookmarks.html。 - 将文件拖入 Bookmark Checker,或点击选择文件。
- 设置并发数和超时时间,然后开始检测。
- 在结果页搜索、筛选、复制或导出书签。
检测完成后会自动写入“最近检测”。首页最多显示最近 10 条记录,点击任意记录可恢复完整结果、统计、搜索、筛选和导出功能。第 11 条记录写入时会自动删除最旧记录;中途停止的任务不会保存。
CSV 使用 UTF-8 BOM,能够直接使用 Excel 打开,包含以下字段:
- 名称
- URL
- 文件夹
- 状态
- HTTP 状态码
- 错误信息
- 最终 URL
- 响应时间
异常 HTML 使用标准 Netscape Bookmark 格式,可重新导入 Chrome。导出的书签 <A> 标签包含 target="block"。
- Node.js 20 或更高版本
- pnpm 10 或更高版本
- Windows 10/11(当前打包目标)
pnpm install项目已允许 Electron、electron-winstaller 和 esbuild 执行必要的安装脚本。
pnpm devpnpm test
pnpm typecheck
pnpm buildpnpm test:运行解析器、URL 检测、导出、IPC 数据转换和历史存储测试pnpm typecheck:检查主进程、preload 和 Vue Renderer 类型pnpm build:生成生产构建到out/
生成可直接运行的解包目录:
pnpm run pack输出位置:
dist/win-unpacked/Bookmark Checker.exe
生成 NSIS 安装程序:
pnpm dist输出位置:
dist/Bookmark Checker Setup 1.0.0.exe
pack 和 dist 已通过 cross-env 配置 Electron 与 electron-builder 国内镜像,无需手动设置 PowerShell 环境变量。
打包前请关闭正在运行的 dist/win-unpacked/Bookmark Checker.exe,否则 Windows 会锁定输出目录并产生 EBUSY 错误。
src/
├── main/
│ ├── index.ts Electron 主进程入口
│ ├── ipc.ts 文件、检测、导出、历史和剪贴板 IPC
│ └── services/
│ ├── bookmark-parser.ts Chrome 书签解析与 URL 去重
│ ├── url-checker.ts HTTP/HTTPS 检测和状态分类
│ ├── check-manager.ts 并发、暂停、继续和停止
│ ├── exporter.ts CSV 与 HTML 导出
│ └── history-store.ts 最近 10 次结果持久化
├── preload/
│ └── index.ts 受限 Renderer API
├── renderer/
│ ├── index.html
│ └── src/
│ ├── App.vue 页面状态和业务交互
│ ├── styles.css 应用样式
│ └── components/ 拖拽、进度、统计和结果组件
└── shared/
├── channels.ts IPC 通道
└── types.ts 共享 TypeScript 类型
tests/ Vitest 自动化测试
nodeIntegration已关闭contextIsolation和 Renderer sandbox 已开启- Renderer 只能调用 preload 暴露的受限 API
- 文件读取、URL 检测、并发管理、历史存储、剪贴板和导出均由 Electron 处理
- 外部链接交给系统默认浏览器打开
- Renderer 页面导航被阻止
- 检测历史保存在 Electron
userData目录下的check-history.json - 不使用第三方 URL 检测 API
- 仅检测 HTTP/HTTPS;
file:、javascript:等协议会标记为不支持。 - 停止任务会立即停止分配新请求;已发出的少量请求会自然结束,但不会再写入结果。
- 历史记录只保存完整检测结果,最多 10 条。
- 当前未配置自定义应用图标,Windows 打包使用 Electron 默认图标。

