Условие гонки расширений Google Chrome

#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" , чтобы расширение всегда работало в фоновом режиме.