Белый список / Блокировка с помощью chrome.webRequest - PullRequest
0 голосов
/ 01 ноября 2019

, поэтому я пытался добавить возможность белого списка в расширение chrome, где этот список можно обновить с помощью или белый список можно полностью отключить.

После проверки документации и всех возможных ответов здесь я все ещестолкнувшись с одной странной проблемой, любой свет на это будет оценен.

Итак, вот фрагмент кода

//this list can be updated by user or other trigger
var allowed = ["example.com", "cnn.com", "domain.com"]; 

//this is main callback, so it can be removed from listener when needed

whiteMode = function (details) {

    //checking url to array
    var even = function(element) {
      return details.url.indexOf(element) == -1;
    }

    if (allowed.some(even) == true) {
        return {cancel: true }
    } else {
        return {cancel: false}
    }
}

//setup listener
chrome.webRequest.onBeforeRequest.addListener(
   whiteMode,
   {urls: ["<all_urls>"]}, 
   ["blocking"]
);

, так что он работает нормально, если пользователь хочет отключить режим, я просто вызываю

chrome.webRequest.onBeforeRequest.removeListener(whiteMode);

Тогда, еслиЯ хотел бы обновить список разрешенных, я сначала использую removeListener, затем повторно запускаю его с новыми значениями, он запускается, однако функция "whiteMode" теперь срабатывает дважды. Проверив с помощью console.log, я вижу, что мой новый URL отсутствует в массиве с первой попытки, затем прослушиватель немедленно работает снова, и существует правильный новый разрешенный массив, однако, поскольку он уже был заблокирован первым триггером, он просто выполняетничего.

Вопрос, почему слушатель продолжает делать это дважды или более (скажем, если я добавлю больше элементов), даже если он был удален перед добавлением обратно.

Есть ли способразобраться со всеми слушателями? (ничего об этом в документации), боролся с этим уже довольно давно ...

Также пробовал с onHandlerBehaviorChanged, но это не помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...