以下是我为了同步谷歌书签而尝试的方法,若后期使用发现问题,我会继续更新此文档
Smart Bookmark
感觉现在我的书签栏和垃圾桶无异,无法及时的整理导致十多年的堆积,完全无法达到及时获取目标的目的
于是,我又找到了
Smart BookmarkSmart Bookmark 配置参考(配图版)来自《AI书签管理:SmartBookmark实用指南》
插件传送门:《Smart Bookmark》,也可以到浏览器商店自行搜索下载安装
AI自动生成标签
在收藏网页时立即调用 AI 模型分析页面内容,自动生成精准标签,目前默认可配置的 AI 模型有:
Open AI
智谱 AI
阿里云百炼
硅基流动
配置需要密钥,以我使用的
硅基流动为例,申请密钥首先要注册硅基流动账号官网传送门 硅基流动 SiliconFlow - 致力于成为全球领先的 AI 能力提供商
注册成功后在左侧菜单中选择
API 密钥新增既可获得密钥腾讯混元
它保留了手动创建标签的功能
WebDAV 同步
依旧支持 WebDAV 同步,配置方法和 floccus bookmarks sync 无异,甚至要更便捷
floccus bookmarks sync
通过 AI(豆包) 虽然功能可以成功运行,但是有两个问题:
- 在同步的过程中总是将本地书签递归逐一删除再进行导入;
- 导入后的书签无法覆盖到书签栏,而是在“所有书签”标签中;
针对以上问题,豆包给出的解释如下:
Chrome 书签 API 中没有暴露 “覆盖 / 替换” 的能力。虽然可以用 chrome.bookmarks.getTree() 获取完整的书签树结构,但是并没有 chrome.bookmarks.setTree() 来批量设置 / 覆盖整个书签树。通过 chrome.bookmarks.update() 方法可以更新书签,不过该方法作用范围仅限单个节,设计初衷是更新单个书签 / 文件夹的属性(比如修改标题、链接),而非批量替换整个书签列表。
加上考虑到 OSS 流量、费用等原因,故放弃该方案。
floccus bookmarks sync 配置教程(配图版)来自《Chrome浏览器书签同步插件floccus与坚果云的协同使用方法》
创建坚果云账号
注册地址传送门《坚果云免费个人网盘注册》
登陆坚果云,
从右上角的用户名称下拉选项中进入“账户信息”在
“安全选项”卡片右下角虚选择“添加应用”,用户名称拟为应用目的或其他既可从左侧菜单
返回“我的文件”,在列表中创建文件夹用来存储书签数据在所创建的文件夹中创建
bookmarks.xbel文件,内容为也可以通过本地创建
.txt文件,编辑后重命名后缀实现,最后上传如云文件夹
安装配置插件
- 插件传送门:《floccus bookmarks sync》,也可以到浏览器商店自行搜索下载安装
- 点击插件图标,在弹出框中选择
NEW ACCOUNT创建新配置 - 选择
XBEL file in WebDAV share选项,并点击ADD ACCOUNT - 最后一步以此填入刚刚在坚果云创建的应用信息
- WebDAV URL 为应用信息示例中的
服务器地址 - Usename 为示例中的
账户名 - Password 为之前创建应用时系统生成的密码
- Bookmarks file path 关联到坚果云中刚创建的
文件夹名称/bookmarks.xbel
- WebDAV URL 为应用信息示例中的
剩下的配置可按照个人习惯自行选择,自此既实现了多端浏览器间的书签(定时、书签变更)自动同步
豆包自研
BookmarkHub 每次都需要手动触发,后期用下来十分不便,常常因为遗忘同步而导致多端书签依旧存在差异。决定自己开发代码尝试解决,代码中绝大部分由豆包提供
插件文件
Node.js 后端
// 后端文件:server.js
const express = require('express');
const bodyParser = require('body-parser');
const OSS = require('ali-oss');
const cors = require('cors');
const multer = require('multer');
const app = express();
app.use(cors()); // 允许跨域
// 解析JSON格式的请求体(处理前端发送的数组数据)
app.use(bodyParser.json());
// 配置阿里云OSS客户端(替换为你的OSS信息)
const clientBookmark = new OSS({
region: 'oss-cn-beijing', // 你的OSS地域
accessKeyId: '', // 建议用RAM子账号,仅授予OSS只读权限
accessKeySecret: '',
bucket: '', // 你的Bucket名称
secure: true, // 新增:强制使用HTTPS(443端口),解决80端口超时
timeout: 30000, // 新增:超时时间30秒,避免短时间内超时
endpoint: "oss-cn-beijing.aliyuncs.com" // 可选:显式指定HTTPS端点
});
const OSS_FILE_PATH = "bookmarks.json"; // 书签在OSS的存储路
// 文件上传配置(内存存储,避免本地写文件)
const upload = multer({
storage: multer.memoryStorage(),
limits: { fileSize: 10 * 1024 * 1024 } // 限制10MB
});
// 接口定义
// 健康检查
app.get('/api/health', (req, res) => {
res.json({ status: "ok", msg: "服务正常" });
});
// 上传书签到OSS
app.post('/api/upload-bookmarks', upload.single('bookmarkFile'), async (req, res) => {
try {
if (!req.file) return res.status(400).json({ success: false, msg: "未上传文件" });
// 从请求中获取文件流
const fileBuffer = req.file.buffer;
// 上传到OSS(覆盖原有文件)
const result = await clientBookmark.put(OSS_FILE_PATH, fileBuffer, {
contentType: "application/json"
});
res.json({
success: true,
msg: "上传成功",
data: { ossUrl: result.url, fileSize: fileBuffer.length }
});
} catch (err) {
console.error("OSS上传失败:", err);
res.status(500).json({ success: false, msg: "OSS上传失败:" + err.message });
}
});
// 从OSS同步书签
app.post('/api/download-bookmarks', async (req, res) => {
// 从远程OSS获取的最新书签JSON
const result = await clientBookmark.get(OSS_FILE_PATH);
const jsonString = result.content.toString('utf8');
try {
// 步骤1:将Buffer转换为UTF-8编码的JSON字符串(关键)
// 阿里云OSS返回的文本数据默认是UTF-8编码,需指定编码格式
const jsonString = result.content.toString('utf8');
// 步骤2:将JSON字符串解析为JavaScript对象
// const normalObj = JSON.parse(jsonString);
// 此时normalObj就是可正常操作的对象了
// console.log('转换后的正常对象:', normalObj);
// 示例:访问对象属性
// console.log('title属性值:', normalObj.title);
res.json({
success: true,
msg: "同步成功",
data: JSON.stringify(jsonString)
});
} catch (error) {
// 异常处理:防止JSON格式错误、编码错误等导致程序崩溃
console.error('转换失败原因:', error.message);
// 排查用:打印原始字符串,确认数据格式是否正确
console.log('Buffer转字符串结果:', ossBufferData.toString('utf8'));
res.status(500).json({ success: false, msg: "OSS同步失败:" + err.message });
}
});
// ------------------- 启动服务 -------------------
const port = 3000;
app.listen(port, () => {
console.log(`后端服务运行在 http://localhost:${port}`);
console.log(`健康检查:http://localhost:${port}/api/health`);
});BookmarkHub
BookmarkHub 是一款在跨浏览器书签同步插件。
适用于各大主流浏览器,如 Chrome、Firefox、Microsoft Edge 等...
它使用通过 GitHub 的 Gist 记录来存储浏览器的书签。谷歌商店传送门:《BookmarkHub - 书签同步》
Edge商店传送门:《BookmarkHub - 书签同步》它不支持自动同步,需用户主动手动触发才能实现同步。
记录以下插件配置流程,配置教程(配图版)参考来自《使用 BookMarkHub 插件进行书签同步》
获取 GitHub Token
两种方式:
- 打开插件设置,点击 “Get Token”(跳转到获取页面);
- 通过 GitHub 生成 Token;
- 登录 GitHub,点击右上角的头像,选择 Settings(设置);
- 进入左边栏最下方 Developer settings(开发者设置);
- 点击 Personal access tokens(个人访问令牌);
- 点击 Generate new token(生成新令牌);
- 在 Note(备注)输入框中填写用途;
- 将 Expiration(失效日期)设置为 No expiration(无过期时间);
- 在下方多选项中勾选 gist;
- 点击 Generate token(生成令牌);
获取 Gist ID
- 访问 Gist,传送门《GitHub Gist》;
- 点击 Create secret gist(创建私密 Gist);
- 输入文件名和文件描述,点击 Create gist(创建 Gist);
- 创建完成后,你会得到一个 Gist ID 和一个文件名(可在页面右上工具栏中复制代码,代码格式如 <script src="https://gist.github.com/文件名/Gist ID.js"></script>);
配置 BookMarkHub 插件
打开 BookMarkHub 插件,依次填入以下信息:
- Github Token:在第 2 步中生成的 Token;
- Gist ID:在第 3 步中创建的 Gist ID;
- Gist 文件名:在第 3 步中创建的文件名;
完成以上配置后,BookMarkHub 插件即可开始同步你的书签。
Google sync
太不好用了。不对,严谨的说法应该是没有梯子就太不好用了!
此单元内容(配图版)参考来自《Chrome浏览器书签同步不及时怎么办?两种方法帮你解决!》
但经测试连接中的说法依旧需要翻墙
方法一
地址栏输入:chrome://sync-internals
点击中列中下方位置 Request Start(同步开启自启) 按钮
方法二
地址栏输入:chrome://sync-internals
点击中列中下方位置 Trigger GetUpdates 按钮
