google-chrome - Chrome 扩展本地存储 : Background. html 无权访问本地存储?

标签 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>

我一直在想我一定是错过了一些小语法问题或其他问题,但什么也看不到。如果我的 list 声明不正确,我认为该警报不适用于该 ID。难住了...

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

最佳答案

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

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

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

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

如果你运行:

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

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

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

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

关于google-chrome - Chrome 扩展本地存储 : Background. html 无权访问本地存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861957/

相关文章:

google-chrome - 谷歌浏览器被放大

javascript - chrome 扩展命令行通信

Javascript Chrome 扩展获取插入符坐标

JavaScript - 字母序列

javascript - 浏览器扩展 (CrossRider) iframe 来源和父访问

php - 谷歌浏览器最大 cookie 过期日期

javascript - Chrome 中的 OpenTok accessDenied 问题

javascript - 将自定义用户代理关联到特定的 Google Chrome 页面/标签

javascript - Chrome 扩展页面 popup.html 不调整大小

JavaScript 定时重定向