Chrome扩展程序setTimeout和Messaging

时间:2012-07-03 13:43:28

标签: google-chrome google-chrome-extension

我正在尝试创建(或者更确切地说)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);
        }
    }

});

1 个答案:

答案 0 :(得分:0)

startTime()不会以任何方式停止执行,setTimeout调用是异步的,因此该函数将立即返回,因此消息将始终立即发回。

您需要重构,以便sendResponse调用来自setTimeout的函数内部。