javascript - 如何跨 Chrome 实例同步 localStorage(或使用 chrome.storage.sync 而不使用已发布的扩展程序)?

标签 javascript google-chrome google-chrome-extension local-storage

这是我的情况:我写了一些 Chrome 用户脚本供我个人使用。以前,我只有一台机器,上面有一个 Chrome 实例,所以我非常乐意将任何持久数据转储到 localStorage 中。

但是,我现在有多台机器,并且想在所有机器上的 Chrome 上使用我的用户脚本,同时使用我的持久数据。同步 userscript 代码本身很简单,但有点乏味(将它放在 Bitbucket 存储库中,然后拉取并手动安装),但我不知道如何跨机器同步我的 localStorage 数据。

我考虑过将我的用户脚本转换为适当的 Chrome 扩展程序并使用 chrome.storage API(使用 chrome.storage.sync 存储的数据显然可以同步,如果你有一个谷歌帐户连接到你的 Chrome 实例,我这样做)。但是,这是我的用例的问题:

  • 为了同步您的数据,您似乎必须将扩展程序发布到 Chrome 商店。
  • 我不希望我的扩展程序在 Chrome 商店中公开可见,因为 1.) 这需要花钱;和 2.) 一些扩展在本质上是“敏感的”。
  • 即使我花钱解决 (1.),我发现将私有(private)扩展程序放在 Chrome 商店中的唯一方法是使用 Google Apps for Work 或 Education(参见 "Publish a private Chrome app") ,而且我显然没有 Google Apps 的个人实例。

那么:我有什么方法可以 1.) 直接跨机器同步 localStorage,或 2.) 在没有公开发布的 Chrome 扩展程序的情况下使用 chrome.storage.sync API?

最佳答案

这并没有真正回答我最初提出的问题,但这是我最终为解决上述问题所做的,所以无论如何。

  • 最后,我放弃了使用 chrome.storage 的想法(chrome.storage.sync 的空间限制是站不住脚的),而是使用 PouchDB 编写了我的扩展程序。 ,这是 CouchDB 的 Javascript 实现。 PouchDB 在内部使用 IndexedDB,默认情况下每个扩展都有限制(我想是 5 MB?我懒得测试了),但是可以通过设置 "unlimitedStorage" 权限来授予无限存储空间在扩展 list 中。 PouchDB 的存储模型基本上在所有方面都明显优于 chrome.storage 存储模型(免费修订跟踪、记录的同步协议(protocol)而不是 voodoo chrome.storage.sync 做的任何事情等),以及缺点(额外的依赖,需要对于单独的远程服务器 [见下文] 等)对我来说不是大问题。
  • 我启动了一个免费的 EC2 微型实例,并在其上安装了 CouchDB 服务器。 CouchDB 的配置有点挑剔,但一旦处理好就可以正常工作。 我的 EC2 实例在一年后不再免费,所以我切换到 Cloudant。 ,它提供与 CouchDB 兼容的托管服务,如果您每月使用值(value)低于 50 美元的存储空间和带宽,我会这样做。
  • 我将我的扩展设置为指向我的 Cloudant 实例,让它使用普通的旧 HTTP 基本身份验证进行身份验证(这在这里很好,因为我是唯一使用此扩展的人,这意味着我可以自由输入我的密码在扩展中以明文形式显示),并在用户请求时让它与远程实例同步。
    • 我在这里采用的身份验证方法(结合部署策略 [见下文] 等)可能有很多漏洞,但我并不在意;似乎足以阻止偶然的入侵,这已经足够了(我没有处理重要或特权数据)。
  • 我现在没有通过 Chrome 商店部署我的扩展程序,这看起来很复杂而且要花钱,我现在有一个更贫民窟的解决方案,通过将解压的扩展程序文件夹复制到我的 Dropbox 中,我可以将我的扩展程序从我的开发机器移动到我的其他机器文件夹并等待 Dropbox 将其同步到我的其他机器。然后我在我的其他机器上加载(或重新加载)解压的扩展。 (这比基于 Bitbucket 的解决方案 [或任何其他基于 Git 的解决方案] 更容易,因为当我尝试使用 Git 完成任何事情时,我的 Windows 机器都表现不佳。)
    • 使用 Dropbox(或涉及未发布的未打包扩展程序的任何其他解决方案)而不是 Chrome 商店的一个缺点 - 每次打开 Chrome 时,Chrome 都会提醒您禁用非商店扩展程序,即使您使用的是 Chrome 开发者 channel .根据下面 Xan 的评论,我可能会重新考虑使用 Chrome 商店作为部署扩展程序的一种方式。

关于javascript - 如何跨 Chrome 实例同步 localStorage(或使用 chrome.storage.sync 而不使用已发布的扩展程序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29567879/

相关文章:

google-chrome - 为什么我在 WhatsApp 网页版中看不到网络事件?

xml - XPath中//和.//之间有什么区别?

HTML5 - Chrome 中的 SVG 文本选择错误?

javascript - Chrome 扩展程序 : Cannot get background to sendMessage to content-script

google-chrome - 从扩展程序访问网页的 `window`/DOM/HTML

javascript - 创建一个 chrome 扩展,它在页面上突出显示文本并将其插入 popup.html 中的文本区域

javascript - 动画数字递增

javascript - Datalist中的Jquery更改事件[html5]

javascript - 为什么我在这个问题上总是得到错误的答案?

javascript - 输入时插入代码