如何在Chrome实例之间同步localStorage(或使用没有发布扩展名的chrome.storage.sync)?

时间:2015-04-10 17:58:28

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

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

但是,我现在有多台计算机,并希望在所有计算机上的Chrome上使用我的用户脚本,我的持久数据随之而来。如果有点乏味(将其粘贴在Bitbucket仓库中,然后拉动并手动安装),同步用户脚本代码本身很简单,但我不知道如何跨机器同步我的localStorage数据。

我已考虑将我的用户脚本转换为正确的Chrome扩展程序并使用chrome.storage API(使用chrome.storage.sync存储的数据显然可以同步,如果您的Chrome帐户已连接到Google帐户,我这样做。但是,这是我的用例的问题:

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

所以:有没有办法让我直接在机器之间同步localStorage,或者2.)使用chrome.storage.sync API而不使用公开发布的Chrome扩展程序?

1 个答案:

答案 0 :(得分:5)

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

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