Обновите настройки 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"]);

Ответы на вопрос(2)

Ваш ответ на вопрос