Добавление прослушивателя Javascript обратно после удаления в расширении Chrome - PullRequest
0 голосов
/ 15 декабря 2018

Я тестирую расширение Chrome.

Как это должно работать, если оно блокирует все запросы, кроме запросов к Google (или другому домену)

Проблема в том, что вы переходите наGoogle.com, Google делает последующие запросы, и они блокируются, поэтому я добавил функцию removeListener.

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

Как я могу добавить этот слушатель обратно, или есть другой способ решить эту проблему? 'я не думаю о?Спасибо.

var blocked_domains = [
"*://*/*"
];

var requestGuard = function(details) {
        if (details.url == "https://www.google.com/") {
            chrome.webRequest.onBeforeRequest.removeListener(requestGuard)
            return {cancel: false };
        } else {
            return {cancel: true };
        }
}

window.onload = chrome.webRequest.onBeforeRequest.addListener(
    requestGuard, {urls: blocked_domains}, ["blocking"]
)

1 Ответ

0 голосов
/ 15 декабря 2018

Основываясь на комментарии @wOxxOm, я смог заставить это работать, повторно инициализировав слушателя после завершения веб-запроса.Вот как это выглядело ...

var blocked_domains = [
"*://*/*"
];

var requestGuard = function(details) {
        if (details.url == "https://www.google.com/") {
            chrome.webRequest.onBeforeRequest.removeListener(requestGuard)
            return {cancel: false };
        } else {
            return {cancel: true };
        }
}

chrome.webRequest.onBeforeRequest.addListener(
    requestGuard, {urls: blocked_domains}, ["blocking"]
)

chrome.webNavigation.onCompleted.addListener(function() {
    chrome.webRequest.onBeforeRequest.addListener(
        requestGuard, {urls: blocked_domains}, ["blocking"]
    )
})

Можно было бы написать лучше, есть некоторый дублирующий код, но он работает

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