0

そのため、xul ブラウザーを含む独自の xul インターフェースがあり、Web サイトから Web ページをロードする必要があります。Web ページによっては、window.postMessage を呼び出して、コンテンツ スクリプト (loadFrameScript によって読み込まれる) をキャッチし、その後、sendSyncMessage を介してメイン スクリプトに戻す必要があります。

https://developer.mozilla.org/en-US/docs/The_message_managerのコードは完全に機能し (下部の単純な例)、私の Web ページからのクリック イベントをリッスンします。ただし、イベントのリッスン タイプを「クリック」から「メッセージ」に変更することはできません。静かに失敗するだけです。

以下より:

https://addons.mozilla.org/en-US/developers/docs/sdk/1.9/dev-guide/guides/content-scripts/communicating-with-other-scripts.html

代わりに、ウェブページからのメッセージを聞くことになっているのではないかと思いました...

document.defaultView.addEventListener('message', function(event) { sendSyncMessage(...);}, false);

...しかし、この方法で設定しようとすると、ドキュメントが存在しないというエラー メッセージが表示されます。

繰り返しますが、The_message_manager のドキュメントから、コンテンツ スクリプトで使用可能なグローバルがリストされており、「ドキュメント」を「コンテンツ」に置き換えようとしましたが、役に立ちませんでした。

誰でも助けることができますか?ありがとう。

4

1 に答える 1

1

そこで、ひねりを加えて問題の解決策を見つけました。

Mozilla のドキュメントのページをめくっていないうちに、私はこれに出くわしました:

https://developer.mozilla.org/en-US/docs/Code_snippets/Interaction_between_privileged_and_non-privileged_pa​​ges

それは主に、メイン Web ページとクロムの間でイベントを送信する (要素を注入する) かなり時代遅れの方法を提案しています (私の使用例ではありません)..しかし、行の 1 つは純金です。

"Note: If you're using HTML5's postMessage() to send a message from unprivileged code to privileged code, adding 'true' to the end of your event listener in your privileged chrome code will allow the message to be received.

1 document.addEventListener("message", function(e) { yourFunction(e); }, false, true);"

現在、このソリューションは window.postMessage() イベントでは機能しないようですが、このソリューションは CustomEvents では完全に機能します!! ...これも、addEventListener() の不思議な 4 番目の引数として「true」を追加する前に失敗しました。カスタム イベントは私のニーズに完全に適合するため、これを解決策と考えています。

したがって、本質的に私はこの不思議な議論のために 2 日間の人生を失いました.IDE がこの議論を提案し、メソッドの使用に関するドキュメントを提示したため、Javascript フレームワークの弱い型付けの性質とドキュメントの貧弱さを根本的に非難します.

ただし、stackoverflow に感謝します。その必要はありません :-)

于 2013-02-05T18:22:49.333 に答える