ClipSync Bridge

加解密在本机 Safari 完成,服务端只保存密文。快捷指令需从 Safari 的分享表单启动,并以当前 Safari 网页作为输入。
首次使用:登录

在此输入 ClipSync 账号。默认会话保存在本机 Safari;不要把密码放进快捷指令 URL。







快捷指令如何启动
  1. 在 Safari 打开此 Bridge 页面并等待加载完成;首次使用先在本页登录。
  2. 在「快捷指令」中新建指令,打开详情,启用「在共享表单中显示」,接受类型仅勾选「Safari 网页」。
  3. 第 1 个动作用「设定变量」把「快捷指令输入」保存为 SafariPage;再添加「获取剪贴板」并用「设定变量」保存为 ClipText。
  4. 添加「Base64 编码」动作,输入选择 ClipText;随后添加「获取变量」动作并选择 SafariPage。
  5. 添加「在网页上运行 JavaScript」动作,输入选择刚获取的 SafariPage。在下方脚本的 __CLIPSYNC_BASE64__ 处插入 Base64 动作的魔法变量。
  6. 运行 JavaScript 后解析返回字典:获取键 ok,用「如果」判断;成功显示「已上传」,失败显示键 error。

上传脚本:在 __CLIPSYNC_BASE64__ 处插入 Base64 动作的魔法变量(不要手打变量名):

(async () => {
  try {
    if (!window.CS) throw new Error('Bridge 尚未加载');
    const encoded = '__CLIPSYNC_BASE64__'.replace(/\s/g, '');
    const binary = atob(encoded);
    const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
    const text = new TextDecoder().decode(bytes);
    const result = await window.CS.runFromShortcut({
      cmd: 'upload', kind: 'text', ttl: '86400', t: text
    });
    completion(result);
  } catch (e) {
    completion({ ok: false, error: String(e && e.message || e) });
  }
})();

Base64 用来安全传递引号、换行、中文等内容,不要直接把剪贴板原文拼进 JavaScript 源码或 URL。

取回最新文本

建立另一条快捷指令,按前述方法保留 SafariPage 并将其传给「在网页上运行 JavaScript」。脚本返回最近一条内容:

(async () => {
  try {
    if (!window.CS) throw new Error('Bridge 尚未加载');
    completion(await window.CS.runFromShortcut({ cmd: 'fetch', n: '1' }));
  } catch (e) {
    completion({ ok: false, error: String(e && e.message || e) });
  }
})();

JavaScript 后解析返回字典;判断 ok 为真且 kind 等于 text 时,取 text 并添加「复制到剪贴板」。n: '1' 是最新一条,改为 '2' 可取第二条。

从 Safari 当前 Bridge 页的分享表单启动。不要从任意 App 或主屏幕运行,也不要把 URL 文本当成「网页」输入。

执行日志
等待指令…
执行结果
等待指令…
安全提示
・密钥派生与加解密全部在 Safari 内完成(WebCrypto)。
・会话与解密密钥默认保存在此 Safari 网站的本机存储中。
・共用设备使用后请点「清除本机登录缓存」。
・不要把密码放进 URL;URL 的 # 片段虽不会发给服务器,仍可能留在 Safari 历史记录中。
・「在网页上运行 JavaScript」仅在 Safari 当前网页的分享表单上下文中运行。