Событие onBeforeRequest с динамическим фильтром

Я разрабатываю расширение для браузера, которое блокирует вызовы определенных URL-адресов по запросу клиента.

URL-адреса, которые необходимо заблокировать, передаются как аргументы «localStorage».

Это мой код расширения:

function logURL(requestDetails) {
    console.log("Loading: " + requestDetails.url);
    return {cancel: true};
}

browser.webRequest.onBeforeRequest.addListener(
    logURL,
    {urls: (localStorage.getItem('block_urls') ? localStorage.getItem('block_urls') : ["https://default/default"] )},
    ["blocking"]
);

Я ожидаю, что перед каждым запросом URL-адреса будут считываться из localStorage и соответственно блокироваться. Если localStorage имеет значение null, у меня есть шаблон URL-адреса по умолчанию (который в основном ничего не делает).

На самом деле происходит то, что параметр фильтра (urls) вызывается только один раз (когда расширение загружается), а не перед каждым запросом.

Есть ли способ динамически изменить фильтр для этого события?

Спасибо за помощников.


person Adi Ohana    schedule 30.01.2018    source источник
comment
Прослушайте все URL-адреса события и прочитайте заблокированные URL-адреса в своем методе logURL...   -  person Aitor Aznar Álvarez    schedule 30.01.2018
comment
Спасибо. Я использовал этот вариант, и он работал   -  person Adi Ohana    schedule 31.01.2018


Ответы (1)


Есть два способа сделать это:

  • прослушивайте все возможные URL-адреса и самостоятельно отфильтровывайте нужные вам события с помощью простого оператора «если»
  • удалить прослушиватель событий и повторно подключить прослушиватель событий при изменении содержимого browser.storage.local
person Smile4ever    schedule 30.01.2018