Chrome扩展程序本地存储:Background.html无权访问localstorage?

时间:2011-05-02 20:10:12

标签: google-chrome google-chrome-extension

从我的弹出窗口和标签页写入和读取LocalStorage工作正常。但是,当我尝试从我的后台页面添加一个值时,它似乎根本就没有写入。我正在通过刷新并查找要显示的值来查看Chrome开发者工具中的本地存储空间。

在以下示例中,添加新书签时,警报中的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。难倒...

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

1 个答案:

答案 0 :(得分:4)

嗯,我可以考虑一些事情。

你说它适用于标签和弹出窗口。这很奇怪,因为它不应该(如果用tab表示内容脚本)。内容脚本只能访问属于它们注入的站点的localStorage。弹出窗口,背景,选项页面以及扩展程序文件夹中的任何其他页面只能访问扩展程序自己的localStorage。那两个本地存储并完全分开。那么也许你正在检查错误的localStorage?

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

第二个时刻是你的localStorage分配可能不是你所期望的。

如果你跑:

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

您将获得分配给5属性的值lastId。因此,要读取您需要运行的书面价值:

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

如果要存储数组,则需要通过JSON序列化/反序列化它们,因为localStorage只能存储字符串。