0

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

});

4

1 回答 1

0

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

您需要重构,以便sendResponse从给定的函数内部进行调用setTimeout

于 2012-07-03T13:54:16.987 回答