关于这个问题还有很多问题有待解决,但我无法在我的案例中找到解释。下面是一个最小的测试案例:
这是我的货单json
{
"manifest_version": 3,
"name": "Test",
"version": "1.0",
"description": "Test extension",
"icons": {
"48": "dark.png"
},
"background": {
"service_worker": "button.js"
},
"permissions": [
"activeTab"
],
"action": {
"default_icon": "dark.png",
"default_title": "DarkTheme"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"dark.js"
]
}
]
}
- 按钮. js**
chrome.action.onClicked.addListener(tab => {
console.log('clicked')
chrome.tabs.sendMessage(tab.id, { value: false })
});
- 深色. js**
chrome.runtime.onMessage.addListener(request => {
console.log('received', request)
})
所以,基本上,我的侦听器在开始时就设置好了,只有当我按下按钮时才发送消息。为什么我按下按钮时会收到这个错误呢?
Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
- 在Chromium版本100.0.4896.75(官方版本)快照(64位)上进行测试 *
3条答案
按热度按时间3pvhb19x1#
谢谢你的帖子,我也有一个类似的问题,对于我的特殊问题,我找不到一个适当的答案,特别是谷歌Chrome扩展清单版本3。
在我的例子中,我想把
chrome.idle.onStateChanged
的空闲状态从background.js
发送到contentScript.js
。当我为reddit构建扩展时,contentScript.js
只被注入到与reddit的URL模式匹配的页面中。然后我得到了和你一样的错误。
未捕获(在承诺中)错误:无法建立连接。接收端不存在。
我在阅读错误消息时意识到,发生这种情况是因为我想向没有
contentScript.js
的页面发送消息。我还注意到,当我打开Chrome但没有打开Reddit页面时,我会锁定屏幕,这会触发一个空闲更改事件,因此我的
background.js
会尝试向页面发送消息。问题是,reddit在最后一个活动标签页中没有打开,因此该消息发送到的标签页没有注入
contentScript.js
。作为初步的解决方案,不确定这是否是最好的风格,但它做的工作,我检查,如果我发送消息的标签确实匹配的网页的URL,我注入的
contentScript.js
与if (tabs[0].url.match('https:\/\/.*.reddit.com\/.*'))
。这确保了我不会向带有**“无接收端”**的选项卡发送消息,并且到目前为止错误已消失。
也许你也可以从这个方向来解决你的问题。
我希望我能帮上点忙。
efzxgjgh2#
从内容脚本向后台发送消息时,应如下所示。
链接:https://developer.chrome.com/docs/extensions/mv3/messaging/
zqry0prt3#
我有一些问题,这遵循的文档在这里如上所述https://developer.chrome.com/docs/extensions/mv3/messaging/这工程的v3
popup.js
Background.js