как перенаправить несколько сообщений content.js на несколько слушателей background.js?

У меня есть расширение Chrome с background.js и content.js. Content.js отправляет сообщение в background.js два раза.

В настоящее время, когда я отправляю первый запрос из content.js, он отправляется обоим слушателям в background.js. Как мне указать запросу просто перейти к фоновому сценарию, который я хочу (то есть articleUrl идет к первому слушателю, а articleData идет ко второму слушателю?)

контент.js

    chrome.runtime.sendMessage({ "articleUrl": articleUrl }, function (response) {
        console.log("sending articleUrl");
        console.log(response);
    });

button.addEventListener("click", function () {
    chrome.runtime.sendMessage({ "title": title, "image_url": image, "url": url, "snippet": "test" }, function (response) {
        console.log("sending articleData");
        console.log(response);
    });
});

фон.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log("receiving articleUrl");
    console.log(request);
});

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log("recieving articleData");
    console.log(request);
});

person codi6    schedule 12.05.2020    source источник
comment
Вы не можете выбрать слушателя. Однако вы можете переработать весь подход, см. Как обрабатывать разные сообщения (из сценария содержимого) в разных функциях фонового сценария?   -  person wOxxOm    schedule 12.05.2020


Ответы (1)


Установите только один прослушиватель для сообщений и направьте данные в соответствующую функцию в зависимости от типа сообщения. Что-то типа:

content.js

chrome.runtime.sendMessage({ "type": "articleUrl", "articleUrl": articleUrl }, function (response) {
    console.log("sending articleUrl");
    console.log(response);
});

button.addEventListener("click", function () {
    chrome.runtime.sendMessage({ "type": "articleData", "title": title, "image_url": image, "url": url, "snippet": "test" }, function (response) {
        console.log("sending articleData");
        console.log(response);
    });
});

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.type == "articleUrl") {
        // Handle articleUrl
    }
    else if (request.type == "articleData") {
        // Handle articleData
    }
});
person Yakko Majuri    schedule 12.05.2020