@2byte

Chrome extension почему не работает обмен сообщениями внутри фоновой страницы?

Из всплывающего окна и встраиваемых скриптов в страницы, chrome.runtime.sendMessage сообщения на фоновой странице видны, все ок. А отправка внутри фоновой страницы не происходит.

Manifest
"background": {
    "scripts": ["surfer.js", "eventPage.js"],
    "persistent": false
  },


surfer.js
'use strict';

/**
 * Surfer by profile pages
 *
 * @constructor
 */
function Surfer() {

}

Surfer.prototype.openWindows = function (urls) {

    var self = this;
    var urlCount = urls.length;
    var stoppedWork = false;

    // Listener status stopped
    chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
        if (message.type == 'stopOpenWindows') {
            stoppedWork = true;

            sendResponse('OK');
        }
    });

    return new Promise(function (resolve, reject) {

        var currentUrl = 0;

        var urlOpen = function () {
            if (currentUrl < urlCount) {
                self.createTab(urls[currentUrl]).then(function (tab) {

                    chrome.runtime.sendMessage({type: 'newTab', tab: tab.id}, response => {
                        currentUrl++;
                        console.log('Send new tab', response);
                        urlOpen();
                    });

                }).catch(function (err) {
                    console.log(err);
                });
            } else {
                resolve();
            }
        };

        if (!stoppedWork) {
            urlOpen();
        } else{
            resolve();
        }

    });
};


eventPage.js
'use strict';

let siteTabId;
let tabs = [];

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {

    // Run script
    if (message.type == 'run') {

        siteTabId = message.tabId;

        chrome.tabs.executeScript(message.tabId, {
            file: 'popupExecutor.js'
        }, () => {
            console.log('Script runned.');

            sendResponse('OK');
        });

    }

    // Handler received users
    if (message.type == 'popupExecutor') {

        new Surfer()
            .openWindows(message.users.slice(2))
            .then(() => {
                console.log('Script is stopped!');
            }).catch(err => console.log(err));

        sendResponse('OK');
    }

    if (message.type == 'stopWork') {

        chrome.runtime.sendMessage({type: 'stopOpenWindows'}, response => {
            console.log('stepped');

            sendResponse('OK');
        });
    }

    console.log("Message eventPage", message);

});


Не работает отправка сообщения при условии if (message.type == 'stopWork') , слушается оно в new Surfer()
.openWindows(message.users.slice(2))

Может так вообще нельзя?
  • Вопрос задан
  • 353 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы