Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展长期连接:从后台检索消息到内容_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展长期连接:从后台检索消息到内容

Javascript Chrome扩展长期连接:从后台检索消息到内容,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我在其他地方阅读和搜索,但我无法解决这个问题。我使用的是长寿命的连接。我从内容脚本向后台发送消息,然后我想从后台向内容脚本发送消息。但是,由于某些原因,我无法接收内容文件上的消息 内容脚本: var port = chrome.runtime.connect({name: "my-channel"}); // receive messages port.onMessage.addListener(function(msg) { console.log(msg); // doesn't lo

我在其他地方阅读和搜索,但我无法解决这个问题。我使用的是长寿命的连接。我从内容脚本向后台发送消息,然后我想从后台向内容脚本发送消息。但是,由于某些原因,我无法接收内容文件上的消息

内容脚本:

var port = chrome.runtime.connect({name: "my-channel"});

// receive messages
port.onMessage.addListener(function(msg) {
  console.log(msg); // doesn't log anything    
});

document.addEventListener('DOMContentLoaded', function () {
    document.getElementById('alertButton').addEventListener('click', function() { 
        // send message
        port.postMessage({myProperty: "value"});
    });
});
背景:

chrome.runtime.onConnect.addListener(function(port) {
    if(port.name == "my-channel"){
        port.onMessage.addListener(function(msg) {
           // do something
           // then send message to the content
           port.postMessage({myProperty: "value"});
        });
    }
});
编辑:my manifest.json

{
  "manifest_version": 2,
  "name": "Test extension",
  "version": "1.0",
  "browser_action": {
  "default_popup": "main_ui.html",
  "default_title": "Test Extension"
  },
  "content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["logic.js"]
  }],
  "background": {
    "scripts": ["background.js"],
    "persistent": true
  },
  "permissions": [
    "tabs",
    "activeTab"
  ]
}
{
“清单版本”:2,
“名称”:“测试扩展”,
“版本”:“1.0”,
“浏览器操作”:{
“默认弹出窗口”:“main\u ui.html”,
“默认标题”:“测试扩展”
},
“内容脚本”:[{
“匹配项”:[“”],
“js”:[“logic.js”]
}],
“背景”:{
“脚本”:[“background.js”],
“持久”:正确
},
“权限”:[
“标签”,
“活动选项卡”
]
}

解决方案:连接发生时,我正在使用的“端口”的旧引用。侦听器的第二个参数(在那里不可见)实际上是端口。

@wOxxOm但我可以在单击按钮时在后台接收消息。只是无法发送backHmm,那么发布的代码片段不足以揭示原因。尝试调试:在后台页面的port.postMessage上设置断点,然后查看它是否运行。请在主题中选择问题:包括重复该问题的。对于Chrome扩展或Firefox WebExtensions,这几乎总是意味着包括manifest.json和一些背景、内容和/或弹出脚本/HTML。寻求调试帮助的问题(“为什么这段代码没有按我想要的方式工作?”)必须包括:(1)所需的行为,(2)特定的问题或错误,(3)在问题本身中重现它所需的最短代码。另请参阅:、和。