Как управлять переменной в фоновом скрипте из сценария (всплывающего)?
Чтобы получить ресурс каждые 10 секунд, я использую цикл setTimeout в приведенном ниже коде.
Но ниже коды не останавливают цикл, когда я снял флажок на всплывающей странице (browser_action).Как взаимодействовать между фоновым скриптом и скриптом страницы (всплывающего)?
Я ожидал, что когда я (установите или снимите) флажок во всплывающем окне, то page_script отправить сообщение фонового скрипта, если фон получить stop_loop
сообщений, изменение фона сценария settimeout_loop_controller
ложь, чтобы остановить SetTimeout петли.
Но эти коды не реагируют, когда я устанавливаю флажок.
Как общаться между двумя сценариями?
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