8

iframe を任意の Web サイト (したがって別のドメイン) に挿入するコンテンツ スクリプトを作成しました。

子 iframe に情報を送信するには、親 Web サイトが必要ですが、それを行う方法が見つかりませんでした。

コード

var targetFrame = $('#myIframe')[0];
targetFrame.contentWindow.postMessage('the message', '*');

どういうわけか動作せず、Cannot call method 'postMessage' of undefinedエラーが発生します。しかし、同じコードを Chrome のコンソールで直接試したところ、うまくいきました。

子から親に postMessage を送信しても問題はありませんでしたが、親が子 iframe にメッセージを送信する方法が必要なだけです。

4

3 に答える 3

3

私は最近、 を実行するコードを書きpostMessageましたiframeが、それcontentWindowundefined.

私の場合、 myiframeはまだ DOM ツリーの一部ではなく、 によって作成された変数でしたdocument.createElement('iframe')

ページの本文に非表示(幅と高さ0px、可視性を非表示)にすると、contentWindow未定義ではなくなり、すべてが期待どおりに機能しました。

プロジェクトに取り組んでいるときに、 Mozilla Developer Networkのページが非常に役立つことがわかりました。postMessage

于 2013-04-04T05:25:17.627 に答える
1

次のライブラリを使用して成功しました。

http://easyxdm.net/wp/

フラッシュ/シルバーライトは必要なく、javascript のみが必要です。また、IE6 まで互換性があります。

起動して実行するには少し手間がかかりましたが、一度実行すると、非常にスムーズに実行されました。

他のドメインで開いている iFrame が異なるプロトコル (HTTP と HTTPS) を使用している場合、ブラウザーはスクリプトの実行を妨げる警告を表示することに注意してください (ユーザーがリスクを受け入れると言わない限り)。両方のプロトコルにアクセスできる場合は、HTTP と HTTPS の両方で iFrame のコンテンツをホストし、それに応じて適切なスクリプトをロードするのが賢明です。

幸運を!

于 2012-08-02T14:42:02.510 に答える
-2

contentWindow をターゲットにする必要はありません。これを試して:

var targetFrame = $('#myIframe')[0];
targetFrame.postMessage('the message', '*');
于 2013-04-04T05:14:48.087 に答える