6

我将以下代码添加到我原本可以正常工作的 Google Chrome 扩展程序中……</p>

var storage = chrome.storage ;
console.log("storage is " + storage) ;
var bookmarks = chrome.bookmarks ;
console.log("bookmarks is " + bookmarks) ;

运行时,控制台说

storage is undefined
bookmarks is [object Object] 

换句话说,书签工作正常,但存储在行动中丢失。我的清单已经要求...

{
   ...
   "permissions": [ "bookmarks", "tabs", "storage" ],
}

万一这很重要,这个扩展作为外部扩展安装在 Mac OS X 上。为了确保它被正确更新,我从安装到 ~/Library/Application Support/Google/Chrome/Default/Extensions 的文件中复制了上面的代码. 当然,我已经重新启动了 Chrome。

为什么 chrome.storage 可能未定义?

4

2 回答 2

5

编辑:下面的答案写于 2013 年。现在是 2021 年,正如 Irfan 在评论中所写:

chrome.storage 也可以从内容脚本中获得。您的扩展程序的内容脚本可以直接访问用户数据,而无需后台页面。https://developer.chrome.com/docs/extensions/reference/storage/

原答案:

LocalStorage 仅在后台页面和弹出窗口中可用。如果您需要访问某些数据,则需要将消息从当前页面传递到后台页面。这是代码:

在您当前的页面中:

chrome.extension.sendMessage({action:"getstorage"}, function(response){
   console.log("storage is " + response.myVar);  
});

在后台页面中:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action == "focusWindow"){
    sendResponse({myVar: localStorage.myStorage});
  }
});

您可以在有关消息传递的 chrome 文档中找到更多示例

于 2013-02-06T21:24:20.400 回答
3

“扩展”选项卡上的扩展内有“重新加载(Ctrl + R)”链接,单击它可以解决问题(我花了几个小时)。禁用/启用扩展也不会重新启动 Chrome 浏览器来解决问题。我希望它能节省别人的时间;)

于 2015-11-18T23:33:37.073 回答