Разница между chrome.runtime.onmessage и событием onmessage chrome.runtime.port - PullRequest
0 голосов
/ 10 мая 2018

Мой ниже contentcript.js получает сообщение только в chrome.runtime.onMessage.addListener, но не в port.onMessage.addListener

             console.log("loaded");
              var port = chrome.runtime.connect({name: "knockknock"});
              port.postMessage({joke: "Knock knock"});
              port.onMessage.addListener(function(msg) {
              port.postMessage({answer: "Madame... Bovary"});
              });
              chrome.runtime.onMessage.addListener(function (msg, sender, response) {
              console.log("cs:on message ");
              });

I send the following message from my backgroundscript.js:



             chrome.tabs.query({
                  active: true,
                  currentWindow: true
              }, function(tabs) {
                chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
                  console.log("message sent");
                });
              });

Почему мой port.onMessage.addListener не сработал, хотяего инициализировано.

1 Ответ

0 голосов
/ 11 мая 2018

С https://developer.chrome.com/extensions/messaging:

Для обработки входящих соединений вам необходимо настроить слушатель события runtime.onConnect. Это выглядит так же из контента скрипт или расширение страницы. Когда другая часть вашего внутреннего номера звонит «connect ()», это событие вызывается вместе с объектом runtime.Port Вы можете использовать для отправки и получения сообщений через соединение. Вот как выглядит ответ на входящие соединения:

chrome.runtime.onConnect.addListener(function(port) {
  console.assert(port.name == "knockknock");
  port.onMessage.addListener(function(msg) {
    if (msg.joke == "Knock knock")
      port.postMessage({question: "Who's there?"});
    else if (msg.answer == "Madame")
      port.postMessage({question: "Madame who?"});
    else if (msg.answer == "Madame... Bovary")
      port.postMessage({question: "I don't get it."});
  });
});

Так вот, как бы вы перехватили ваше сообщение с определенного порта:

chrome.runtime.onConnect.addListener(function(port) {
  port.onMessage.addListener(function(msg) {
    console.log(msg) // msg object will be your message
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...