0

基本的に、Chrome の拡張機能のドキュメントにあるコードを実行しようとしています。そして、それが私が立ち往生しているところです。

コンテンツ スクリプト >> バックグラウンド ページ (XHR 用) から値を渡そうとしています。

そして、コンソールに表示されるエラーは次のとおりです。

ポート エラー: 接続を確立できませんでした。受信側が存在しません。miscellaneous_bindings : 236

'undefined' のイベント ハンドラーのエラー: 未定義のプロパティ 'farewell' を読み取れません TypeError: 未定義のプロパティ 'farewell' を読み取ることができません :281:11 at chrome.Event.dispatchToListener (event_bindings:387:21) at chrome.Event.dispatch_ (event_bindings:373:27) at chrome.Event.dispatch (event_bindings:393:17) at Object.chromeHidden.Port. dispatchOnDisconnect (miscellaneous_bindings:239:27)





content_script.jsは次のようになります。

function func1(){

$(function() {

    $('.genericStreamStory').each(function(){
       var link = $(this).find('.uiStreamSource a').attr('href');

       $(this).find('.uiStreamFooter').find('.a1').remove();
       $(this).find('.uiStreamFooter').append("<span class='a1' style='color:red !important;'> · Sample</span>");


       $(this).find('.a1').click(function(){
           alert('hi');
            chrome.extension.sendMessage({greeting: "hello"}, function(response) {
              console.log(response.farewell);
        });

        console.log('testing');

       }); //end of click handler
    });     //end of 'each' function
});

}
func1();
window.setInterval("func1()", 1000);

メッセージ送信ステートメントchrome.extension.sendMessage({greeting: "hello"}, function(response) { console.log(response.farewell); });

Chrome 拡張機能のドキュメント から取得されます。

background.js :

$(function() {

    chrome.extension.onMessage.addListener(
        function(request, sender, sendResponse) {
          console.log("background");
          console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
          if (request.greeting == "hello")
          sendResponse({farewell: "goodbye"});
 });// end of onMessage listener

});

onMessage リスナーのコードは、Chrome のドキュメントから取得されます。

そして最後にmanifest.json :

{
"name": "Facebook123",
"version": "0.1", 
"description": "Sample",

"content_scripts": [
    {
        "matches": ["https://*.facebook.com/*"],
        "js": [
                "/js/external/jquery.js", 
                "/js/content_script.js"
            ]
    }
],

"background": {
    "scripts": ["/js/background.js"]
},

"manifest_version": 2
}

conrent_script.js によって送信されたメッセージを処理するために、リスナーが「利用可能」ではないようです。

content_script.js の Click Handler が機能しています。スパン「a1」をクリックすると、「hi」アラート ボックスがポップアップし、「testing」というメッセージがコンソールに出力されます。

エラーは何ですか?

4

1 に答える 1

1

バックグラウンド ページのコンソールを開きます ( Chrome 拡張機能で background.js からコンソール メッセージを読み取る場所は? )。

$(function() { });jQuery をロードせずに使用しているため、"ReferenceError: $ is not defined" のようなエラーが表示されます。
バックグラウンド ページで domready イベントを待つ必要がないため、 and を削除する$(function(){});問題が解決します。回避する別の方法は、jQuery を含めることです。

"background": {
    "scripts": [
        "/js/external/jquery.js", 
        "/js/background.js"
    ]
},

通常、「ポート エラー」は、誰もメッセージをリッスンしていないときにメッセージを送信しようとしていることを示します。この場合、リスナーはエラーのためにバインドされていませんが、多くの場合、シーケンス (イベント バインド、イベント トリガー) のタイミングが不適切であり、修正する必要があります。

于 2013-03-20T11:18:58.770 に答える