@Scorpiored88

Как корректно отправить сообщения с background.js в content_script в расширении для Chrome?

Всем добрго!
Пишу расширения для Хрома и столкнулся с непонятной для меня проблемой при отправки сообщения с background в content_script. Данные в background я получаю по Websocket и пересылаю в content_script.
Вот мой код:

background:

ws.onmessage = function (event) {
        console.log('MESSAGE: ' + event.data);
        let msg = event.data;
        console.log('got msg form device -> ', msg);
        chrome.tabs.query({active: true}, function (tabs) {
            console.log('tab > ', tabs[0].url, tabs[0].id);
            let convertedData = String(tabs[0].url).includes("siteA.com") ? dataFormater('siteA', msg) : dataFormater('siteB', msg);
            chrome.tabs.sendMessage(tabs[0].id, {
                action: msg == 'removed' ? msg : 'showDepositModal',
                data: convertedData
            }, function (response) {
                console.log(response);
            });
        })
    };


И content_script :

chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        if(window.location.href.includes("siteA.com") || window.location.href.includes("siteB.com")){
            if (request.action == 'showDepositModal') {
                console.log("content script got masg ", request.data);
                showModal(request.data);


            } else {
                hideModal();
            }
        }


    }
);


Вроде как все работает, но не особо стабильно :(
Очень часто content_script не получает сообщения от background, для того чтобы все сново заработало нужно просто обновить текущую страницу, и все работает... до какого то времени. Не понимаю почему....

Интересный факт - если в расширениях включить режим разработчика и открыть background.js таких "залипаний" не наблюдал.

Буду благодарен за помощь в решении этой непонятной для меня ситуации
  • Вопрос задан
  • 840 просмотров
Решения вопроса 1
BenderLib
@BenderLib
JS
Добавьте в файл manifest.json разрешение "permissions" : [ "activeTab" ].
и
"background" : { "scripts" : [ "eventPage.js" ], "persistent" : true }

а именно "persistent" : true
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы