2 つの iFrame を相互に通信させるにはどうすればよいですか? たとえば、私は2番目のiframeの要素値であり、1番目のiframeには表示要素があります。2 番目のフレームから 1 番目のフレームの値を取得する必要があります。どうすればいいですか?Cookie を使用するとは言わないでください。大量のデータで問題が発生する可能性があります。
3 に答える
要素が同じドメインから提供される場合、<iframe>
要素は相互に直接アクセスできます。たとえば、次のiframe1
ことができます。
document.getElementById('someDiv').innerHTML =
top.document.getElementById('otherIframe').contentWindow.
document.getElementById('someOtherDiv').innerHTML;
最初に、両方の iframe に対して完全なコード変更機能が必要になることを警告します。Iframe は厳格なセキュリティで処理されます。それ以外の場合は、ドメイン「bunkofamerica.com」を作成し、「bankofamerica.com」を iframe に配置して、ユーザーが入力したパスワードを分析することができます。(とにかく銀行は iframe バスティング コードを持っている傾向がありますが、それでも...)
このネイティブ関数を探しています: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage
そして、これは私の会社がこのブラウザ間の互換性を高めるために使用する github ライブラリです: https://github.com/daepark/postmessage
jbabey は正しいです。iframe が同じドメインとプロトコルにある場合は、簡単です。
Opera Docsはこれを最も関連性の高い例で説明しましたhttps://dev.opera.com/articles/window-postmessage-messagechannel/#channel
まず最初に、フレームがそれ自体の外で相互作用できる唯一の方法は、両方の場所にロードされたコンテンツが同じドメインからのものである場合です。そうでない場合、CORS エラーが発生します。
それがすべてグレービーであると仮定すると、親フレームのウィンドウ オブジェクトにマネージャー オブジェクトを作成します。
window.Mgmt = {
frame1: $('iframe#frame1'),
frame2: $('iframe#frame2')
}
window.parent.Mgmt.frame1
次に、いずれかのiframeで、などを使用してそのオブジェクトにアクセスできるはずです