18910140161

JavaScript-chrome.storage.sync的替代方案,可在密钥中存储超过8KB-堆栈溢出

顺晟科技

2022-10-18 12:39:07

118

我构建了一个Chrome扩展,它从弹出表单中获取信息,以某种方式对其进行格式化,然后将其输出";卡片";。请看下面的图片。

https://i.stack.imgur.com/pkdu0.png.

当它吐出单独的";Cards";,它将包含所有卡片的DIV的innerHTML保存到存储中。当程序加载时,它会从存储中获取该项,并根据保存的内容相应地更改DIV的innerHTML.这样,当我刷新或退出并返回时,卡片不会消失。

但是,我遇到了一些问题,因为我打算在多台计算机上使用此程序,但我不想在一台计算机上使用与另一台计算机不同的卡。

我的目标是:能够在多台计算机上保存两个字符串(可能非常大,远远超过8KB)。

我试过

的:

  • 我曾尝试使用local.storage和chrome.local.storage,但它们都不提供跨多台计算机使用的功能。
  • 我曾尝试使用chrome.sync,它显示了最大的成功可能性,但失败了,因为密钥有严格的8KB配额,而我的密钥比8KB大得多,因为它们保存了整个DIV.
  • 研究一种存储字符串的方法,比如谷歌硬盘之类的。我发现了一些我认为类似的API,但它被弃用了。
  • 寻找一种外部方式来存储数据,但我相信它们都需要花钱。

代码:

function setOnLocalStorage(){
    chrome.storage.sync.set({'template': document.getElementById('cards').innerHTML})
    chrome.storage.sync.set({'groupTemplate': document.getElementById('listContainer').innerHTML})

chrome.storage.sync.get('template', function(data){   
    var z = data
    document.getElementById('cards').innerHTML = [Object.values(z)[0]]
    })

chrome.storage.sync.get('groupTemplate', function(data){   
    var y = data
    document.getElementById('listContainer').innerHTML = [Object.values(y)[0]]
    })

其他信息:如果有帮助的话,每张卡片都是独立的。我有删除和复制功能,每张卡都可以通过更改上下文菜单来使用。


顺晟科技:

如果要存储的值略高于8KB,则可以使用JS库来缩小内容(ZIP)。您还可以实现一个定制的例程,将值拆分为小于8KB的键,并在需要检索原始值时连接这些键。您可以将这两种方法合并在一起,或者.....您可以使用Supabase或Firebase服务。

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航