10

尝试在内容脚本和后台脚本之间进行通信时,出现以下错误:

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

背景.js

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

流云.js

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

和我的manifest.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.html 的 background_page: "background.html" 的解决方案,但由于自 manifest_version: 2 以来不支持 background_page,我不能使用它。

4

2 回答 2

27

sendMessage并且onRequest兼容

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

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

对于Chrome 20 - 25,使用和:chrome.extension.onMessagechrome.extension.sendMessage

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

对于Chrome 26+,请使用和。chrome.runtime.onMessagechrome.runtime.sendMessage


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

于 2012-08-04T20:52:52.410 回答
3

代替

chrome.extension.onRequest.addListener(onRequest);

采用

chrome.extension.onMessage.addListener(onRequest);

由于您使用的是 sendMessage 而不是 sendRequest。

新版 Chrome 中更新了消息解析。sendRequest 和 onRequest 已被弃用。推荐使用 sendMessage 和 onMessage。

有关Content Script 和 Background 之间的消息解析,请参阅文档。

于 2012-08-04T20:51:12.017 回答