您好,我目前正在开发Chrome网站和扩展程序。
目前,他们每个人都在本地离线维护一组对象。该网站正在使用localStorage,而使用chrome.storage进行扩展。
现在我想在两个数组之间进行同步。它提出了一些解决方案:
1)在服务器上构建端点以获取/发布数组
2)编写代码以在2个数组之间进行同步,即每次更改1个数组时,我们将更改填充到其他数组,反之亦然。
3)在本地,离线只存储该阵列的单个实例。
=>我正在尝试实施此解决方案。
我遇到了this和this。但是那个消息传递解决方案并不是我想要的。
那么,有没有办法在本地离线存储对象,可以在网站和Chrome中的扩展程序之间共享?
使用带有本地存储的内容脚本时出现问题:
当前用例:
答案 0 :(得分:0)
嗯,我想我发现我的解决方案如下。使用cross-storage库
它由一个集线器和许多客户组成:
Hub:充当服务器,实际与localStorage API交互
客户端:创建一个iframe以在Hub上加载文件并发布消息以访问集线器中的数据(获取,设置,删除)
示例代码:
Hub
// Config s.t. subdomains can get, but only the root domain can set and del
CrossStorageHub.init([
{origin: /\.example.com$/, allow: ['get']},
{origin: /:\/\/(www\.)?example.com$/, allow: ['get', 'set', 'del']}
]);
注意$匹配字符串的结尾。上例中的RegExps将匹配起源,例如valid.example.com,但不匹配invalid.example.com.malicious.com。
Client
var storage = new CrossStorageClient('https://store.example.com/hub.html');
storage.onConnect().then(function() {
return storage.set('newKey', 'foobar');
}).then(function() {
return storage.get('existingKey', 'newKey');
}).then(function(res) {
console.log(res.length); // 2
}).catch(function(err) {
// Handle error
});