, поэтому я пытался добавить возможность белого списка в расширение 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, но это не помогло.