我正在尝试编写一个简单的chrome扩展,但是在尝试从我的内容脚本"auto.js“访问options.html的本地存储时遇到了一些困难。
根据我收集到的(谷歌搜索和阅读Chrome令人困惑的文档),这只有可能使用:
chrome.runtime.sendMessage & chrome.runtime.onMessage.addListener内容脚本auto.js:
var quantity = ""
var shoe_size = ""
function addToCart() {
chrome.runtime.sendMessage({localstorage: "qty"}), function(response){
var quantity = response.qty;
}
chrome.runtime.sendMessage({localstorage: "size"}), function(response){
var shoe_size = response.size;
}
...我在“options.js”中的听众:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
if(request.localstorage == "qty")
sendResponse({qty: localStorage.qty});
else if(request.localstorage == "size")
sendResponse({size: localStorage.size});
else
sendResponse({});
});
...问题是我的变量quantity & shoe_size从未被设置为从html本地存储‘返回’的值。
在我的js控制台中没有给出错误,我不确定如何调试。任何反馈都是非常感谢的。
发布于 2013-03-29 13:40:44
这是因为在触发sendMessage之后,会立即运行sendMessage之后的代码。它们被设置了,但它不会等待响应,它们是在你需要它们的时间之后设置的。我在这里遇到了同样的问题,Synchronously get Stored data from content scripts。要解决这个问题,你可以在里面放入任何你想要的函数
chrome.runtime.sendMessage({localstorage: "qty"}), function(response){
var quantity = response.qty;
}要查看它是否已设置,请测试以下内容:
chrome.runtime.sendMessage({localstorage: "qty"}), function(response){
var quantity = response.qty;
}
alert("waiting for a second, to make sure that response is ready ...");
alert("Not it is set:" + quantity);发布于 2014-04-26 06:34:29
在sendMessage回调函数中使用前面的var编写var quantity = response.qty;。这将创建一个与全局变量同名的局部变量。但它是一个不同的变量。一旦sendMessage完成,存储它的内存就会被释放,因为这只是一个局部作用域。
将var留在sendMessage内部。
此外,您还缺少这些全局变量上的分号。
var quantity = "";
var shoe_size = "";除此之外,您还可以在sendMessage回调函数中的内容脚本'auto.js‘中使用console.log。它会在加载该脚本的任何网页的控制台中。
https://stackoverflow.com/questions/15697763
复制相似问题