我正在尝试设置,稍后请求在扩展名
中本地存储的数据我这样做的方式是从内容脚本发送请求,如下所示
chrome.runtime.sendMessage({method: "fetchData"}, doSomething)
在后台页面上,消息由以下方式接收和解析:
chrome.runtime.onMessage.addListener(getData);
其中getData是一个函数,如下所示:
var getData = function(message, sender, sendResponse) {
if (message.method == "fetchData"){
chrome.storage.local.get('myinfo',function(items){
console.log(items);
if (items.myinfo){
sendResponse({status: items.myinfo});
} else {
sendResponse({status: items.myinfo});
}
}); //storage.local.get
}
return true;
}
现在第一次运行此存储时,存储为空,因此items是一个空对象{}
因此,items.myinfo未定义
在Linux上测试我的chrome安装时确实如此。
但是,在Mac上运行Chrome扩展程序时(下面的OS X 10.9.2标题)...
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36 module=default version=1
...后台页面吐出以下错误:
Error in response to storage.get: TypeError: Cannot read property 'myinfo' of undefined
事实证明,在这种情况下,项目是未定义的,而不是空对象。
我试图找出是否检查未定义的项目,然后使用一些数据填充chrome.storage.local ......
storage.set({'myinfo': message.key}, function() {
});
...有助于解决问题,或者是否继续存在。
为什么chrome.local.storage.get的这种行为在不同的操作系统上有所不同。我错过了一些明显的东西吗?