Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome.Storage.Local持久性_Javascript_Google Chrome_Google Chrome Extension_Google Chrome Storage - Fatal编程技术网

Javascript Chrome.Storage.Local持久性

Javascript Chrome.Storage.Local持久性,javascript,google-chrome,google-chrome-extension,google-chrome-storage,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Storage,全部。我已经开始使用Chrome的各种API开发小的扩展,尽管事情进展顺利,但我仍然对一些事情感到好奇 两个问题,如果你们不介意帮我的话: 1.有人能告诉我chrome.storage.local的持久性有哪些限制吗?我自己尝试过各种测试,比如用chrome.storage.local.set()存储一些东西,清除所有浏览器历史记录、cookies等,然后查看是否所有东西都还在。通常它仍然存在,但有时我会稍后再查看,它就会消失。总的来说,我无法确定我正在做的事情是偶尔清除.local数据 2.到

全部。我已经开始使用Chrome的各种API开发小的扩展,尽管事情进展顺利,但我仍然对一些事情感到好奇

两个问题,如果你们不介意帮我的话:

1.有人能告诉我chrome.storage.local的持久性有哪些限制吗?我自己尝试过各种测试,比如用chrome.storage.local.set()存储一些东西,清除所有浏览器历史记录、cookies等,然后查看是否所有东西都还在。通常它仍然存在,但有时我会稍后再查看,它就会消失。总的来说,我无法确定我正在做的事情是偶尔清除.local数据

2.到目前为止,我主要使用的是chrome.storage.sync,而没有使用chrome的“登录到chrome”功能登录。我在API页面上读到,如果在Chrome离线时使用.sync(我假设是在我的情况下,也没有登录),数据将存储在本地,然后稍后进行同步。我主要担心的是,这是否意味着我使用chrome.storage.sync存储的数据可能会像使用chrome.storage.local存储的数据一样被删除?我一直使用.sync的一个主要原因是,我从来没有用它擦除数据的经验,而使用.local(如我在#1中所述)

非常感谢!请帮帮我


编辑:我非常确定.local clear不会发生,因为我错误地删除了扩展,然后又将其添加回。我知道这将清除.local数据(但保留.sync)。

我是该API的作者

chrome.storage.local不应该消失,除非是在卸载时(听起来像是你的情况),或者是在数据库损坏时(我们看到这种情况在系统还原时尤其如此)

chrome.storage.sync的工作方式相同,但它使用的合并算法可能会导致数据丢失,如果两台机器进行了冲突的更改。在您的情况下,如果您登录到使用chrome.storage.sync的计算机,可能会发生这种情况。更常见的情况是,在进行更改时,一台计算机处于脱机状态,或者可能是用户同时更改了两台计算机上的数据(这就是为什么建议只更改用户操作的数据——我们应该对此进行记录)

值得一提的是——我们也应该记录这一点——合并算法是最后一次更改,同步是事实的来源——但添加的任何本地键/值对都不会被删除。如果您有:

{a:1,b:2}在计算机a上(登录并同步), {b:3,c:4}在计算机b上(未登录)

计算机B登录后,在进行完全同步后,a和B上的存储状态将结束于{a:1,B:2,c:4}因为a的数据已经是同步的一部分,这是事实的来源,但“c”还不存在,所以被添加


在这种情况下,A将获得一个onChange事件,添加“c”,B将获得一个onChange事件,添加“A”,并将“B”从3更新为2。

我今天花了一些时间研究这个问题。我的成绩在。自接受答案以来,
chrome.storage.sync
的行为似乎已经改变。特别是,似乎不再存在任何合并行为。取而代之的是要么全有要么全无,同步服务器上的任何对象都“获胜”。删除会传输到服务器,但不会从服务器传输到其他客户端。

非常感谢!信息量很大。我猜我刚刚完全重新安装了应用程序,忘记了它,然后假设.local清除是因为其他原因。这是否意味着.local中的存储在相对较长的时间内是安全的?“同步是事实的来源”肯定需要记录。如果在B开始同步之前A显式删除了
c
,会发生什么?比如说,它首先被添加,然后被A.@kalman删除,有没有办法将这个google.storage API用于会话存储而不是本地存储?如果创建该API的扩展被卸载,该存储能否被保留?如果不再安装该扩展,为什么该扩展的数据需要合理地保留@克里斯蒂亚克