Chrome 扩展:chrome.storage 未定义

Jer*_*ock 6 google-chrome-extension

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

var storage = chrome.storage ;
console.log("storage is " + storage) ;
var bookmarks = chrome.bookmarks ;
console.log("bookmarks is " + bookmarks) ;
Run Code Online (Sandbox Code Playgroud)

运行后,控制台说

storage is undefined
bookmarks is [object Object] 
Run Code Online (Sandbox Code Playgroud)

换句话说,书签可以正常工作,但在操作中缺少存储。我的清单同时要求...

{
   ...
   "permissions": [ "bookmarks", "tabs", "storage" ],
}
Run Code Online (Sandbox Code Playgroud)

以防万一,此扩展程序在 Mac OS X 上作为外部扩展程序安装。为确保正确更新,我将上述代码从安装到 ~/Library/Application Support/Google/Chrome/Default/Extensions 的文件中复制. 当然,我已经重新启动了 Chrome。

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

Pau*_*nel 6

编辑:下面的答案写于 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);  
});
Run Code Online (Sandbox Code Playgroud)

在后台页面:

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

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