2013-05-20 24 views
11

どのように2つのiFramesをお互いに話すことができますか? たとえば、2番目のiframeの要素値で、1番目のiframeにdisplay要素があります。私は2番目のフレームから1番目の値を取得する必要があります。どうすればいい? クッキーを使用してはいけません。膨大な量のデータで傷つける原因となります。iFrames間の通信?

+4

まず、同じドメイン上のiframeですか?または、彼らは異なるサイトから来たのですか? – BBog

+1

https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage – epascarello

+0

同じドメインです。したがって、両方ともhttp://www.example.comにあります。 – Matthew

答えて

17

要素が同じドメインから配信される場合、それらは互いに直接アクセスできます。例えば、iframe1であなたが行うことができます:

document.getElementById('someDiv').innerHTML = 
    top.document.getElementById('otherIframe').contentWindow. 
    document.getElementById('someOtherDiv').innerHTML; 
+0

topを使用すると、このコード自体がフレームにロードされることはありません。それ以外の場合は、期待するものを指しません。 –

+0

@MattBerkowitzどういう意味ですか?ページに2つのiframeがあり、それらから 'top'を呼び出すと、他のiframeを見つけることができるウィンドウが表示されます。 – jbabey

+16

いいえ、これはあなたに親や祖父母などのトップフレームを与えます。あなたが今述べた設定を別のiframe内に読み込まれたものとみなします(私たちはiframeでページを読み込む人を制御できません)。おそらくCORSの要件を満たしていないかもしれない "otherIframe"が見つからない最も外側のページを返します。 'top'の代わりに' parent'を使うと、おそらくあなたがやっていると思っていることを確実にするので、少し上手くいくでしょう。 –

5

は、私はあなたが両方のiframeのための完全なコードの修正能力を必要とすることを最初にあなたを警告します。 iframeは厳重なセキュリティで処理されます。それ以外の場合は、ドメイン "bunkofamerica.com"を作成し、 "bankofamerica.com"をiframeに配置してから、入力時にユーザーのパスワードを分析することができます。 https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

そして、ここに私の会社はこれがよりクロスにするために使用していますgithubのライブラリがあります:あなたはこのネイティブ関数を探している(銀行はとにかくIFRAMEつぶしコードを持っている傾向があるが、それでも...)

ブラウザ互換:https://github.com/daepark/postmessage

jbabeyは正しいですが、iframeが同じドメインとプロトコルにある場合は、より簡単です。

オペラドキュメントがhttps://dev.opera.com/articles/window-postmessage-messagechannel/#channel

0

まず物事は最初、フレームはそれの外側は自己だ対話できる唯一の方法は、両方の場所にロードされたコンテンツは、同じドメインからであるされている場合そうあなたが行っている最高の関連例でこれを説明CORSエラーを取得します。

それがすべてグレイビーであるとすれば、私は親フレームのウィンドウオブジェクトにマネージャオブジェクトを作成します。

あなたが window.parent.Mgmt.frame1を使用してそのオブジェクトにアクセスすることができるはずのiframeのいずれかで、その後
window.Mgmt = { 
    frame1: $('iframe#frame1'), 
    frame2: $('iframe#frame2') 
} 

など