#javascript #html #google-chrome #google-chrome-extension #race-condition
#javascript #HTML #google-chrome #google-chrome-extension #race-условие
Вопрос:
У меня есть расширение Google Chrome. В background.js файл, он содержит этот прослушиватель:
chrome.webRequest.onBeforeRequest.addListener(function(info)
{
console.log("On Before request info", info);
},
{
urls:
[
"<all_urls>"
]
},
[
"blocking"
]
);
Я говорю Google Chrome, чтобы он открывался с помощью параметра командной строки «—app», и открываемая им html-страница содержит следующее:
<script type="text/javascript">
let url = new URL(window.location.href);
let targetUrl = url.searchParams.get("targetUrl");
if(targetUrl != null)
{
targetUrl = unescape(targetUrl);
console.log("The target url is:", targetUrl);
window.location.href = targetUrl;
}
</script>
Он получает URL-адрес из параметров, а затем переходит к нему.
Проблема в том, что прослушиватель моего расширения Google Chrome не запускается.
Я обнаружил, что если я настрою его на перенаправление с таймаутом в 1 секунду.
Затем он срабатывает, как и предполагалось.
Это заставляет меня поверить, что background.js файл с моим расширением не выполняется до загрузки первой страницы.
Как я могу заставить Google Chrome гарантировать, что все расширения будут загружены и инициализированы до загрузки первой страницы?
Комментарии:
1. Действительно, активная вкладка загружается перед любыми расширениями во время запуска браузера, поэтому они не будут видеть никаких событий. Одним из обходных путей было бы добавить
"background"
"permissions"
, чтобы расширение всегда работало в фоновом режиме.