我正在尝试创建(或者更确切地说)Chrome扩展程序开发。我试图在弹出窗口和后台页面之间完成一个简单的任务。到目前为止,我已将页面放在适当的位置,并且弹出窗口可以向背景和背景页面回复发送消息。我现在迷失了创造我想要的行为:
此时,后台进程立即发送响应,我确信我做得不对。这是一些代码
弹出窗口:
chrome.extension.sendMessage({
method: "popup",
message: "remindMe",
now: parseInt(localStorage.timeNow),
timeToRemindIn: 5
},
function(response) {
console.log("sendMessage");
console.log(response.farewell);
//alert(response.farewell);
console.log("sendMessage after");
背景:
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse) {
//console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
if (request.message == "remindMe") {
startTime();
if(localStorage.timeToRemindIn > now) {
sendResponse({farewell: "reminder to check"});
}
} else {
sendResponse({farewell: "hai hai"});
}
});
function startTime() {
now = parseInt(now) + 1;
if(localStorage.timeToRemindIn > now) {
console.log("Reminder to check this tab Yo! " + now);
return;
}
if (localStorage.timeToRemindIn <= now) {
timerId = window.setTimeout(startTime, pollInterval);
}
}
});
答案 0 :(得分:0)
startTime()
不会以任何方式停止执行,setTimeout调用是异步的,因此该函数将立即返回,因此消息将始终立即发回。
您需要重构,以便sendResponse
调用来自setTimeout
的函数内部。