webRequest необязательное разрешение и фоновый скрипт - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь использовать webRequest в качестве дополнительного разрешения в моем расширении Google Chrome.Поэтому я хочу, чтобы скрипт backgorund прослушивал события webRequest только при наличии такого разрешения.

Попытка добиться этого с помощью этого кода:

chrome.permissions.contains({
    origins: ["https://www.freelancer.com/projects/fileshare/*",
        "https://freelancer-filestorage-pmb.s3.amazonaws.com/*"],
    permissions: ["webRequest",
        "webRequestBlocking"]
}, response => { 
        // only register the webRequest listener if there is this permission...
        // I don't know if this is a valid way of doing this, but I don't have other ideas
        if (response) {
            chrome.webRequest.onHeadersReceived.addListener(details => {
                    console.log("went through the request");
                 return {responseHeaders: details.responseHeaders};
                },

                { urls: ['https://freelancer-filestorage-pmb.s3.amazonaws.com/*'] },

                ['blocking', 'responseHeaders']
            );
        }
});

Это, похоже, не работает, т.е. дажекогда я даю разрешение, веб-запросы не перехватываются.

Я помню, что читал в документации что-то, что добавление прослушивателя событий внутри асинхронной функции (как я делаю здесь) не будет работать должным образом.Но как мне тогда достичь того, что мне нужно?Не регистрируйте слушателей асинхронно, так как они не будут правильно запущены.

Если я просто добавлю

chrome.webRequest.onHeadersReceived.addListener

вфоновый скрипт, без проверки разрешения, тогда я получу ошибку, что webRequest не определен.

РЕДАКТИРОВАТЬ: вставил больше кода

РЕДАКТИРОВАТЬ2: Документация для разработчиков Chrome на https://developer.chrome.com/extensions/background_pages произнесите следующее:

Не регистрируйте слушателей асинхронно, так как они не будут правильно запускаться.

Я исправил свою проблему, настроив прослушиватель сообщений вфоновый скрипт, который добавляет и удаляет прослушиватель для webRequest, в зависимости от того, установил ли пользователь разрешение или отменил его.

Что-то странное по-прежнему происходит примерно в 5% случаев, когда после предоставления разрешения какое-то время оно все еще выглядит как не предоставленное, и регистрация слушателя завершается неудачей.

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