Я пытаюсь использовать 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% случаев, когда после предоставления разрешения какое-то время оно все еще выглядит как не предоставленное, и регистрация слушателя завершается неудачей.