javascript - Chrome Extension : Port error: Could not establish connection. 接收端不存在。

标签 javascript google-chrome google-chrome-extension

当尝试在我的内容脚本和背景脚本之间进行通信时,出现以下错误:

Port error: Could not establish connection. Receiving end does not exist.
Error in event handler for 'undefined': Cannot read property 'message' of undefined       
TypeError: Cannot read property 'message' of undefined

background.js

function onRequest(request, sender, callbackFunction) {
    console.log("Me (BS) became this Message:" + request.message);
    sendResponse({message: request.message})
};
chrome.extension.onRequest.addListener(onRequest);

streamcloud.js

function contactBackground(nachricht){
    chrome.extension.sendMessage({message: nachricht}, function(response) {
        console.log("The Background Script got the following Message: " + response.message);
    });
}

和我的ma​​nifest.json

{
  "name": "InstantWatch - Dev",
  "manifest_version": 2,
  "version": "0.7",
  "permissions": ["tabs", "http://*/", "https://*/"],
  "background": {
    "scripts": ["background.js"]
  },  
  "browser_action": {
    "default_title": "InstantWatch",
    "default_icon" : "icon.ico"
  },
  "content_scripts": [
    {
      "matches": ["http://*/*", "http://*/*"],
      "js": ["jquery.js", "streamcloud.js"]
    }
  ]
}

我找到了添加 background_page: "background.html"和空 background.html 的解决方案,但由于 background_page 自 manifest_version: 2 起不受支持,我无法使用它。

最佳答案

sendMessageonRequest 不兼容

如果您需要支持Chrome 19 及更早版本,请使用 onRequest sendRequest :

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    // Warning: Chrome 19- [receiver]
});
chrome.extension.sendRequest(message, optional_sendResponse);

对于 Chrome 20 - 25,使用 chrome.extension.<b>onMessage</b>chrome.extension.<b>sendMessage</b> :

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    // Chrome 20+
});
chrome.extension.sendMessage(message, optional_sendResponse);

对于 Chrome 26+,使用 chrome<b>.runtime.</b>onMessage chrome<b>.runtime.</b>sendMessage .


注意:从 Chrome 26 开始,已弃用的方法仍然受支持,尽管没有记录。如果有机会,请更新您的扩展程序以使用新方法,以确保您的扩展程序将来仍能正常工作。
参见 this answer用于创建与 Chrome 20+ 兼容的代码。

关于javascript - Chrome Extension : Port error: Could not establish connection. 接收端不存在。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811554/

相关文章:

javascript - "return arr"在递归函数的 if 语句中不起作用。为什么?

javascript - 如何在 iOS 中的 UIWebView 文档目录中使用 Javascript?

javascript - 如何使用 javascript 在新选项卡中打开 chrome 设置

google-chrome - Chrome 扩展 : How to use inline installation for multiple verified sites with one Extension

c# - 使用 chrome 而不是 SHDocVw.InternetExplorer

javascript - 可以通过 Chrome 扩展程序修改窗口对象吗?

google-chrome - Chrome 扩展;在新选项卡中打开 popup.html 中的链接

javascript - “Is there an JavaScript function for finding the browser Content Text using mouse hover element?”

javascript - chrome.runtime 是否支持发布带有可传输对象的消息?

javascript - 如何在 ExtJS 5 中监听 Ajax 代理是否成功?