Update WebExtension webRequest.onBeforeRequest-Listener-URL-Einstellungen aus separatem Skript

Ich erstelle gerade eine WebExtension, in der ich einen Listener für die ausgeführten Webanforderungen registriere:

main.js:

chrome.webRequest.onBeforeRequest.addListener(main_function, {urls: sites}, ["blocking"]);

wosites ist ein Array mit einer Liste von URLs, die von einer Einstellungsseite geladen wurden.

enn ich diese Einstellungen ändere, die in separaten HTML- und JavaScript-Dateien gespeichert sind, möchte ich den oben genannten Listener so aktualisieren, dass er jetzt die neue Liste der Websites enthäl

Ich habe Probleme, Zugriff auf diesen Listener aus der Einstellungs-JavaScript-Datei zu erhalten, da

 onBeforeRequest.removeListener(callback)

erfordert den ursprünglichen Rückruf als Argument.

Weiß jemand, wie ich diesen Listener aus einer anderen JavaScript-Datei aktualisieren kann?

Beispiel für ein Problem (3 Dateien):

manifest.json:

{
    ...
    "permissions": ["webRequest", "webRequestBlocking", "storage"],
    "background: { "scripts": ["main.js"] },
    "options_ui": { "page":"settings.html" }
}

where settings.html lädt wiederum 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"]);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage