【问题标题】:Chrome Extension: chrome.storage is undefinedChrome 扩展:chrome.storage 未定义
【发布时间】:2013-01-17 10:42:36
【问题描述】:

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

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] 

换句话说,bookmarks 工作正常,但 storage 在操作中丢失。我的清单已要求两者……

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

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

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

【问题讨论】:

  • 您需要使用消息传递。您在 Chrome 扩展程序中设置的 localstorage 变量是扩展程序私有的。 developer.chrome.com/extensions/messaging.html
  • chrome.storage 需要 Chrome 20+,您应该升级您的浏览器吗?
  • 我正在使用 Chrome 26。我只是 Stack Overflow 上的 35 指针,所以我可能不太了解如何使用它,但我认为 Chris 的评论实际上是一个答案。我的意思是,它确实回答了我的问题。谢谢你,克里斯。
  • 我进一步了解到 Chrome 中有两个“本地存储”API:(1) 常规 HTML5 localStorage,以及 (2) Chrome 专有的具有高级功能的 chrome.storage。当(1)足以完成我的任务时,我尝试使用(2)是错误的。使用 localStorage,不需要配置、权限或通过 hoops 跳转消息。它“正常工作”,例如: localStorage.myKey = "My Value" ; // 漂亮!

标签: google-chrome-extension


【解决方案1】:

编辑:下面的答案写于 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});
  }
});

您可以在Message Passing 上的 chrome 文档中找到更多示例

【讨论】:

  • chrome.storage 也可从内容脚本获得。您的扩展程序的内容脚本可以直接访问用户数据,而无需后台页面。 developer.chrome.com/docs/extensions/reference/storage
  • Irfan 是对的,我的答案是在 2013 年写的。从那以后情况发生了变化。
【解决方案2】:

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

【讨论】:

  • 谢谢!这是我的问题! :) 似乎只有在您重新打包扩展程序或执行此操作时才会重新加载宣言……
猜你喜欢
  • 2012-09-03
  • 2021-02-26
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 2017-04-23
相关资源
最近更新 更多