2011-05-02 124 views
2

从LocalStorage的书写和阅读工作正常,从我的弹出窗口和标签。但是,当我尝试从我的背景页面添加一个值时,它似乎根本没有写入。我正在浏览Chrome开发人员工具中的本地存储,方法是刷新并查找要显示的值。Chrome扩展程序本地存储:Background.html无权访问本地存储?

在添加新书签时,在以下示例代码中,background.html'lastId'正确显示在警报中。但是,该值不会被存储。另外,对已知值的请求似乎失败,并且不显示警报。 (结果是相同的尝试如下两种语法。)

<html> 
<script> 
// Grab the id of newly created bookmarks 
chrome.bookmarks.onCreated.addListener(function(id) { 
    var lastId = id; 
    alert(lastId); 
    localStorage['lastId'] = lastId; 
      var testvalue = localStorage['309']; 
    alert(testvalue); 
      localStorage.setItem('lastId', lastId); 
    var testvalue2 = localStorage.getItem('309'); 
    alert(testvalue2); 
}); 
</script> 
</html> 

我一直在想,我必须只是缺少一些小的语法问题,或者什么,但什么都看不到。如果我的清单声明不正确,我认为警报不会用于ID。难以置信...

更新:事实证明,您必须强制重新加载更新到后台页面的扩展,因为它们在打开时在浏览器内存中保留。这就是为什么我保存的代码似乎不起作用。它没有刷新,我很尴尬。

+0

请回答您自己的问题或标记为有人回答正确。谢谢 – hitautodestruct 2012-02-16 15:30:28

+0

投票关闭 – 2013-03-27 00:47:40

回答

4

嗯,我可以考虑几件事情。

你说它在一个标签和一个弹出窗口中工作。这是非常奇怪的,因为它不应该(如果通过标签来表示内容脚本)。内容脚本只能访问属于他们注入站点的localStorage。弹出窗口,背景,选项页面和扩展文件夹中的任何其他页面只能访问扩展自己的localStorage。这两个地方储藏室完全分开。所以也许你正在检查错误的localStorage?

要查看扩展自己的localStorage,您需要检查背景或弹出页面并检查检查器中的资源选项卡。要检查站点或内容脚本localStorage,您需要在页面上打开常规检查器。

第二时刻是您的localStorage任务可能不是你所期待的。

如果你运行:

var lastId = 5; 
localStorage['lastId'] = lastId; 

你会得到分配给lastId属性值5。因此,读取写入值,你需要运行:

alert(localStorage['lastId']); //not localStorage['5'] 

如果你想存储阵列,那么你就需要序列化/ JSON通过反序列化他们为localStorage的只能存储字符串。

+0

嗨塞尔格,感谢您的想法。我应该澄清,通过标签我正在做的是超越默认的newtab模板。因此,新建页面和弹出窗口都可以成功地从同一本地存储位置进行写入和读取。当我尝试在此处粘贴的代码时,我通过扩展名列表中的链接检查background.html,打开Chrome开发人员工具并显示相同本地存储的内容。所以,它似乎确实将存储标识为适用于background.html。我很困惑... – Korak 2011-05-03 00:05:26

+0

@Korak你使用的是Chrome 12吗? – serg 2011-05-03 00:41:36

+0

不,目前正在使用11 ... – Korak 2011-05-03 00:42:44