尝试在内容脚本和后台脚本之间进行通信时,出现以下错误:
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); }); }
和我的 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_page:“ background.html”和一个空白background.html的解决方案,但是由于manifest_version:2不支持background_page,所以我不能使用它。
sendMessage并且onRequest是 不兼容 。
sendMessage
onRequest
如果您需要支持 Chrome 19及更早版本 ,请使用 onRequest 和 sendRequest :
sendRequest
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { // Warning: Chrome 19- [receiver] }); chrome.extension.sendRequest(message, optional_sendResponse);
对于 Chrome 20-25 ,请使用和:chrome.extension. **onMessage**``chrome.extension. **sendMessage**
chrome.extension. **onMessage**``chrome.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 **.runtime.** onMessage
chrome **.runtime.** sendMessage
注意:从Chrome 26开始,仍支持不推荐使用的方法,尽管未记录。如果有机会,请更新您的扩展程序以使用新方法,以确保您的扩展程序将来仍然可以使用。