バックグラウンドスクリプトの変数をページ(ポップアップ)スクリプトから制御する方法は?
リソースを10秒ごとに取得するには、以下のコードでsetTimeoutループを使用しています。
ポップアップページ(browser_action)のチェックボックスをオフにした場合、以下のコードはループを停止しません。バックグラウンドスクリプトとページ(ポップアップ)スクリプト間の通信方法は?
私は(check or uncheck)チェックボックスをポップアップで、background_scriptがバックグラウンドスクリプトにメッセージを送ったときに、stop_loop
メッセージを受け取ると、バックグラウンドスクリプトは、settimeoutループを止めるためにsettimeout_loop_controller
をfalseに変更します。
ただし、チェックボックスをクリックするとこのコードは反応しません。
2つのスクリプト間の通信方法は?
let settimeout_loop_controller = true;
function fetching() {
if (settimeout_loop_controller) {
// if 'settimeout_loop_controller become false, the loop will stop.
fetch("http://url.com/example").then((getval) => { do_something })... ;
setTimeout(fetching, 10000);
} else {
return;
}
}
fetching();
chrome.runtime.onMessage.addListener((message) => {
if message.type === "stop_loop" {
settimeout_loop_controller = false;
}
else if (message.type === "start_loop") {
settimeout_loop_controller = true;
fetching();
}
});
ポップアップスクリプトは:
let checkbox = document.getElementById("checkbox");
checkbox.onchange((e) => {
if (checkbox.checked) {
chrome.runtime.sendMessage({"type": "start_loop"});
}
else {
chrome.runtime.sendMessage({"type": "stop_loop"});
}
});
トピックになるように[編集]してください:**完全** [mcve]問題を複製してください。通常、* manifest.json *、バックグラウンド、コンテンツ、ポップアップスクリプト、HTMLの一部が含まれます。デバッグの助けを求める質問(「**なぜこのコードは動作しないのですか?**」)には、以下が含まれていなければなりません:►必要な動作、►特定の問題またはエラー*、および►問題を再現するのに必要な最短コード自体**。明確な問題文がない質問は、他の読者にとって有用ではありません。参照してください: "**どのように[mcve] **を作成するか"、[ここで私はどんな話題を聞くことができますか?](http://stackoverflow.com/help/on-topic)、[ask] – Makyen
[Firefox WebExtension設定ページ](http://stackoverflow.com/a/39236352/3773011)はFirefoxとChromeで完全に機能しテストされています。たとえば、オプション/ポップアップページと背景のスクリプト。 – Makyen
[mcve]が必要なのは、私たちが手伝ってくれることです。問題を再現するために必要なすべてのコードを再作成する必要がなければ、**多くの**助けが簡単です。これはあなたがすでに持っているコードです。だから、私たちを助けて、そのような質問の問題を再現する完全な* [mcve]を提供してください。 [mcve]がなければ、あなたを助け始めるために必要な努力の量は、あなたを喜んで助けることができる人の数を大幅に減らします。私たちが余計な努力をしても、あなたの問題の重要な部分を*推測する必要があります。 – Makyen