Google chrome extension chrome.runtime.onmessage和chrome.runtime.port onmessage事件之间的差异

Google chrome extension chrome.runtime.onmessage和chrome.runtime.port onmessage事件之间的差异,google-chrome-extension,Google Chrome Extension,My Lower contentscript.js只接收到chrome.runtime.onMessage.addListener的消息,而不接收到port.onMessage.addListener的消息 console.log("loaded"); var port = chrome.runtime.connect({name: "knockknock"}); port.postMessage({joke: "

My Lower contentscript.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在初始化时没有被触发。

来自:

为了处理传入连接,您需要设置 runtime.onConnect事件侦听器。这从内容上看是一样的 脚本或扩展页。当分机的另一部分呼叫时 “connect()”,此事件与runtime.Port对象一起激发 您可以使用通过连接发送和接收消息。 以下是对传入连接的响应:

因此,这就是从特定端口捕获消息的方式:

chrome.runtime.onConnect.addListener(function(port) {
  port.onMessage.addListener(function(msg) {
    console.log(msg) // msg object will be your message
  })
})
chrome.runtime.onConnect.addListener(function(port) {
  port.onMessage.addListener(function(msg) {
    console.log(msg) // msg object will be your message
  })
})