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

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 がサポートされていないため、使用できません。

4

2 に答える 2

27

sendMessage互換性がありませonRequestん。

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.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);

sendRequestではなくsendMessageを使用しているため。

新しいバージョンのChromeでメッセージの解析が更新されました。sendRequestとonRequestは非推奨になりました。sendMessageとonMessageを使用することをお勧めします。

コンテンツスクリプトとバックグラウンド間のメッセージ解析については、ドキュメントを参照してください。

于 2012-08-04T20:51:12.017 に答える