关于谷歌浏览器书签同步的尝试

以下是我为了同步谷歌书签而尝试的方法,若后期使用发现问题,我会继续更新此文档


Smart Bookmark

感觉现在我的书签栏和垃圾桶无异,无法及时的整理导致十多年的堆积,完全无法达到及时获取目标的目的

于是,我又找到了 Smart Bookmark

Smart Bookmark 配置参考(配图版)来自《AI书签管理:SmartBookmark实用指南

插件传送门:《Smart Bookmark》,也可以到浏览器商店自行搜索下载安装

AI自动生成标签

在收藏网页时立即调用 AI 模型分析页面内容,自动生成精准标签,目前默认可配置的 AI 模型有:

它保留了手动创建标签的功能

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

剩下的配置可按照个人习惯自行选择,自此既实现了多端浏览器间的书签(定时、书签变更)自动同步


豆包自研

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 按钮

分类: 工作相关

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注