我正在使用Chrome扩展程序,但是最近我发现我遇到了以下错误(指向popup.html
的第一行):
未经检查的runtime.lastError:无法建立连接。接收 结束不存在。
我发现了类似的问题here。但是那里的错误是由我未在清单中声明的background
属性引起的。
我正在chrome.extension.onMessage.addListener
脚本上使用contents.js
监听事件,并在chrome.tabs.sendMessage
脚本上使用popup.js
发送事件。在大多数情况下,一切正常,但有时我会遇到上述错误,并且所有请求都无济于事。
manifest.json
的格式如下:
{
"manifest_version": 2,
"name": "APP_NAME",
"description": "APP_DESCRIPTION",
"version": "APP_VERSION",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab",
"storage",
"clipboardRead",
"clipboardWrite"
],
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"content.js"
],
"css": [
"content.css"
]
}
]
}
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.action === "this") console.log({
dom: doThis()
});
if (request.action === "that") sendResponse({
dom: doThat()
});
else if (request.action === "other") doOther();
else sendResponse({});
});
function getSelectedTab() {
return new Promise(function(resolve) {
chrome.tabs.getSelected(null, resolve);
});
}
function sendRequest(data) {
data = data || {
action: undefined
};
return new Promise(function(resolve) {
getSelectedTab().then(function(tab) {
chrome.tabs.sendMessage(tab.id, data, resolve);
});
});
}
document.querySelector("#this").addEventListener("click", function() {
sendRequest({
action: "this"
}).then(function(res) {
console.log(res);
});
});
document.querySelector("#that").addEventListener("hover", function() {
sendRequest({
action: "that"
});
});
addEventListener("blur", function() {
sendRequest({
action: "other"
});
});
答案 0 :(得分:0)
我不确定我的答案是否适合给定的情况,但是如果您阅读它,就会遇到此类问题,也许我的答案会为您提供帮助。
我花了很多时间,试图了解为什么在我使用开发版本时有时会引发此错误,而对于我的扩展的发行版却不这样做。然后我了解到,每次保存代码后,它都会在chrome上更新,并创建脚本的新内容版本。因此,如果您不重新加载页面,则使用先前版本的代码创建context.js并使用更新的版本再次尝试,则会引发此错误。
我只是花了整整一天的时间来弄清楚,这很简单,但是关于这种情况,stackoverflow中有很多答案,所以您过去常常尝试一下,而不用脑子思考。不要像我:)