0

sendRequest/onRequest の代わりに新しい API sendMessage/onMessage を使用してメッセージを送信すると、JS コンソールで次のエラーが発生します。Port error: Could not establish connection. Receiving end does not exist.

古いAPIで動作していたので、それが来るのか理解できません。

ここにいくつかのサンプルがあります:

//content.js
 chrome.extension.sendMessage({index: number}, function(response) {   
     console.log("test", response.data);                          
 });                                                              



//background.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    // From content script.                                                 
    if (sender.tab) {
     //stuff
    }
    sendResponse({who: "me",data: "tata"}); 
});

何か案は ?どうも

4

2 に答える 2

0

@Matthieu onMessage/sendMessage が Chrome 20 以降でのみ機能することを確認できます。Chromium は古いバージョンでもサポートしています (どのバージョンからか思い出せません、申し訳ありません)。ただし、この種のエラーが発生した場合は、Chorme がバックグラウンド ページを読み込めないエラーが発生している可能性があります。または、スクリプトがコンテンツ スクリプトを介してデータを取得しようとしている場合は、通常のタブではなく、コンソールがフォーカスされている可能性があります。通常、問題はこの最後のものです。

@rkp ブラウザに sendMessage/sendRequest とそれぞれの onMessage/onRequest があるかどうかを検出したい場合は、chrome.extension.hasOwnProperty('onMessage')またはchrome.extension['onMessage']. false の場合、ブラウザは onRequest/sendRequest のみをサポートしていることは間違いありません。sendRequest/onRequest の存在をテストするかどうかに関係なく、同じことが当てはまります。

于 2012-10-06T23:35:46.160 に答える
0

sendMessage/onMessage は 20.xxx より前のバージョンの chrome ではサポートされていません。そのため、ブラウザのバージョンを検出して sendRequest/onRequest を使用する必要があります。このコード行を使用して、Chrome ブラウザーのバージョンを検出できます。(parseInt(navigator.userAgent.match(/Chrom(e|ium)/([0-9]+)./)[2]) > 20)

于 2012-09-15T11:26:25.013 に答える