Обновите настройки URL слушателя WebExtension webRequest.onBeforeRequest из отдельного скрипта
В настоящее время я создаю WebExtension, в котором я регистрирую слушателя на веб-запросы, как так:
main.js:
chrome.webRequest.onBeforeRequest.addListener(main_function, {urls: sites}, ["blocking"]);
гдеsites
массив, содержащий список URL-адресов, загруженных со страницы настроек
После изменения этих настроек, которые находятся в отдельных файлах HTML и JavaScript, я хочу обновить вышеупомянутого слушателя, чтобы теперь он содержал новый список сайтов.
У меня проблемы с получением доступа к этому слушателю из файла настроек JavaScript, так как
onBeforeRequest.removeListener(callback)
требует исходного обратного вызова в качестве аргумента.
Кто-нибудь знает, как я могу из другого файла JavaScript обновить этот слушатель?
Пример проблемы (3 файла):
manifest.json:
{
...
"permissions": ["webRequest", "webRequestBlocking", "storage"],
"background: { "scripts": ["main.js"] },
"options_ui": { "page":"settings.html" }
}
где settings.html в свою очередь загружает settings.js.
main.js:
/* I wont type out the code to load this array from settings. You will have to imagine it being loaded */
all_urls = ["http://www.google.com", "http://www.stackoverflow.com"];
function example_callback() {
console.log("Hello World!");
}
chome.webRequest.onBeforeRequest.addListener(example_callback, {urls: all_urls}, ["blocking"]);
settings.js:
/* Again, imagine that the settings are edited by this file and saved to storage. */
all_urls = ["https://www.google.com"];
/* This is where the problem lies. Listener cannot be removed, as callback is not available in this file */
chrome.webRequest.onBeforeRequest.removeListener(); // Wont work
chrome.webRequest.onBeforeRequest.addListener(example_callback, {urls: all_urls}, ["blocking"]);