Atualizar as configurações de URL do ouvinte do WebExtension webRequest.onBeforeRequest a partir de um script separado
Atualmente, estou criando uma WebExtension na qual registro um ouvinte nas solicitações da Web que estão sendo feitas, como:
main.js:
chrome.webRequest.onBeforeRequest.addListener(main_function, {urls: sites}, ["blocking"]);
Ondesites
é uma matriz que contém uma lista de URLs carregados de uma página de configurações.
Ao alterar essas configurações, que vivem em arquivos HTML e JavaScript separados, desejo atualizar o ouvinte mencionado para agora conter a nova lista de sites.
Estou tendo problemas para obter acesso a este ouvinte no arquivo JavaScript de configurações, como
onBeforeRequest.removeListener(callback)
requer o retorno de chamada original como argumento.
Alguém sabe como posso, a partir de um arquivo JavaScript diferente, atualizar esse ouvinte?
Exemplo de problema (3 arquivos):
manifest.json:
{
...
"permissions": ["webRequest", "webRequestBlocking", "storage"],
"background: { "scripts": ["main.js"] },
"options_ui": { "page":"settings.html" }
}
onde o settings.html, por sua vez, carrega o 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"]);