Google chrome extension chrome.runtime.onMessage Listener在单个sendMessage调用中多次启动

Google chrome extension chrome.runtime.onMessage Listener在单个sendMessage调用中多次启动,google-chrome-extension,Google Chrome Extension,在单击按钮时,我试图发送消息,但我的侦听器被多次调用 popup.js: chrome.tabs.sendMessage(tab.id, {action: "write", data: getData()}, function (response) { console.log(response,"!!!!");}); content.js: chrome.runtime.onMessage.addListener(test); function te

在单击按钮时,我试图发送消息,但我的侦听器被多次调用

popup.js:

chrome.tabs.sendMessage(tab.id, {action: "write", data: getData()}, function (response) { 
console.log(response,"!!!!");});
content.js:

chrome.runtime.onMessage.addListener(test);

function test(request, sender, sendResponse) {
  if (request.action === "write") {
     console.log("write");
  }
 return true;
}

有人知道我做错了什么吗?

问题不完整:您需要展示如何声明/注入content.js。您可以使用
“所有帧”:true
或多次调用executeScript。这就是我在manifest.json中的配置方式“content_scripts”:[{“matches”:[“https://*/*”],“all_frames”:false,“js”:[“scripts/content.js”]}]```我在点击按钮时有这个语句
chrome.tabs.executeScript(null,{file:“scripts/content.js”})删除chrome.tabs.executeScript-当您在manifest.json中声明脚本时,脚本已经自动运行。非常感谢,它可以正常工作,但之前我遇到了这个错误,所以我将该语句放在了那里。”无法建立连接。接收端不存在'。知道发生此错误的原因。如果有条件地在content.js中添加侦听器,则可以保留当前代码:if(!chrome.runtime.onMessage.hasListeners())chrome.runtime.onMessage.addListener(test);