Расширение белого списка Chrome - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь сделать расширение белого списка в Chrome.Когда я запускаю расширение, я получаю следующую ошибку:

Uncaught Error: Parameter 1 (filter) is required.
    at validate (extensions::schemaUtils:36)
    at validateListenerArguments (extensions::webRequestEvent:19)
    at WebRequestEventImpl.addListener (extensions::webRequestEvent:92)
    at WebRequestEvent.publicClassPrototype.(anonymous function) [as addListener] (extensions::utils:138:26)
    at window.onload (bkg.js:3)

Я просмотрел несколько других вопросов и не смог выяснить, что происходит.Я также сделал поиск в Google по моей ошибке, и ничего не появилось.

bkg.js (фоновый скрипт)

window.onload = function(){

    chrome.webRequest.onBeforeRequest.addListener(
        function(details) {
            var allowed = ["*://*.google.com/*", "*://*.nbclearn.com/*"];
            chrome.tabs.getSelected(null, function(tab) {
                var tabUrl = tab.url;

                if ($.inArray(tabUrl, allowed) == -1){
                    return {
                        cancel: true
                    }
                }
                else {
                    return {
                        cancel: false
                    }
                }
            },
        {urls: ["*://*/*"]},
        ["blocking"]);
    });
};

Я ожидал, что это позволит только веб-сайтам из массива allowedзагрузить и другие будут заблокированы.Вместо этого я получаю ошибку сверху, а расширение ничего не делает.Что означает ошибка, которую я получаю, и что я могу сделать, чтобы ее исправить?

1 Ответ

0 голосов
/ 18 февраля 2019

Вот ваш код с исправленным отступом:

window.onload = function(){

    chrome.webRequest.onBeforeRequest.addListener(function(details) {
        var allowed = ["*://*.google.com/*", "*://*.nbclearn.com/*"];
        chrome.tabs.getSelected(null, function(tab) {
            var tabUrl = tab.url;

            if ($.inArray(tabUrl, allowed) == -1) {
                return {cancel: true}
            } else {
                return {cancel: false}
            }
        }, {urls: ["*://*/*"]}, ["blocking"]);  // all these are chrome.tabs.getSelected arguments
    });  //chrome.webRequest addListener arguments are missing
};

Как видите, вы передаете {urls: ["*://*/*"]}, ["blocking"] в качестве аргументов chrome.tabs.getSelected вместо chrome.webRequest слушателя.Следуя примеру документации , вы можете сделать:

window.onload = function(){

    chrome.webRequest.onBeforeRequest.addListener(function(details) {
        return {cancel: (details.url.indexOf("google.com/") == -1 && details.url.indexOf("nbclearn.com/") == -1)} },
        {urls: ["<all_urls>"]},
        ["blocking"]);
};

Чтобы заблокировать все запросы, кроме тех, которые поступили от этих двух доменов.

Вы можете использовать Array.prototype.every чтобы иметь доменные имена в массиве.Например:

window.onload = function(){

    var allowed = ["chrome.com/", "nbclearn.com/", "example.com/"];

    chrome.webRequest.onBeforeRequest.addListener(function(details) {
        var isForbidden = allowed.every(function(url) {
            return details.url.indexOf(url) == -1;
        });
        return {cancel: isForbidden}
    }, {urls: ["<all_urls>"]}, ["blocking"]);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...