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 に答える