7

私のコンテンツ スクリプトは、background.js にメッセージを送信します。応答のコールバック ハンドラーでは、最後の行を"alert(alrt_msg)". コードを実行すると警告ボックスが表示されますが、[OK] をクリックすると、Chrome コンソールに次のように赤で表示されます。

Error in event handler for 'undefined': Cannot call method 'disconnect' of null TypeError: Cannot call method 'disconnect' of null
    at chromeHidden.Port.sendMessageImpl (miscellaneous_bindings:285:14)
    at chrome.Event.dispatch (event_bindings:237:41)
    at Object.chromeHidden.Port.dispatchOnMessage (miscellaneous_bindings:250:22) 

あまり有益ではありませんが、直観的に、このエラーは、ユーザーが「OK」をクリックしている間にどこかの構造がガベージコレクションされていることが原因であることがわかりました。だから私は自分のコードを

window.setTimeout(function() { alert(alrt_msg); } , 1);

これにより、上記のエラーなしで機能しました。それでも、ドキュメントやグーグルを検索した後、この背後にある正確な理由を見つけることができませんでした. 誰かが何が起こっているのか、ドキュメントにこれを行うための特定の方法が含まれているかどうかを説明できますか?

4

2 に答える 2

2

私は同じ問題に来ました。これは、応答ハンドラーで呼び出される関数のエラー (私のコードの障害) が原因です。

これが私のコードです:

background.js - リスニング側

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    var update_msg = 'test';
    sendResponse({data: update_msg});
    return false; // -> Add this or not add this do not matter
  });
}

送信側:

function updateObjDatabase(obj) {
  chrome.runtime.sendMessage({data: obj}, function(response) {
    // Update when it's done
    update_msg_handler(response.data);
  });
}

function update_msg_handler(msg) {
  ..... error code here
}

間違ったコードは実際には関数にありますupdate_msg_handler。しかし、Chrome コンソールはその詳細を教えてくれません。IDE がない場合は、デバッグするために console.log を追加する必要があります。

于 2013-06-15T03:15:35.660 に答える