我正在制作Chrome扩展程序,我使用chrome存储来存储变量。实际上我是先从用户输入一个计时器,然后在每T秒后刷新页面,这些是用户输入的。所以这次存储我使用了这样的chrome存储:
.border
任何人都可以帮助为什么currentTimer仍未定义。我正在调试很长时间,但无法找到解决方案。
问题是,只要刷新页面,currentTimer就会获得NULL值,因为用户只输入了一次。
答案 0 :(得分:1)
当原始函数已经完成时,所有chrome.*
API回调都是异步调用的,这也意味着在回调之前执行chrome.*
API调用之后的下一个语句。
将需要结果的代码放入回调中:
chrome.storage.sync.get('something', function(item) {
setTimeout(someFunction, item.value);
});
如果内容脚本中需要结果,请在新消息中返回值:
内容脚本:
chrome.runtime.sendMessage({request: "doSomething"});
chrome.runtime.onMessage.addListener(function(msg) {
if (msg.response) {
// do something with the received msg.response
}
});
后台脚本:
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
if (msg.request == "doSomething") {
var tabId = sender.tab.id, frameId = sender.frameId;
chrome.storage.sync.get('something', function(item) {
sendMessageToFrameId(tabId, frameId, {response: item.value});
});
}
});
function sendMessageToFrameId(tabId, frameId, msg) {
// 1. frameId works since Chrome 41 and throws on prior versions
// 2. without frameId Chrome 45 sends the message to wrong tabs
try { chrome.tabs.sendMessage(tabId, msg, {frameId: frameId}); }
catch(e) { chrome.tabs.sendMessage(tabId, msg); }
}