2

私はこれについていくつかの調査を行いました、そして私が見つけたものはあなたが使うことができる同じドメインの場合でした

document.getElementById('iframe_id').contentWindow.function_name()

クロスドメインでこれを試しました(実験中)クロスドメインエラーが発生しました&[例外:TypeError:オブジェクト[オブジェクトウィンドウ]のプロパティ'function_name'は関数ではありません]

だから私は3つの部分の質問があります

a)子から親にアクセスするのに問題がある場合は理解できます(子iframe内で(親のドメインからの)別のiframeを使用して、すでにこれを処理しています)。しかし、なぜ親から子にアクセスする際に問題が発生するのでしょうか。それは、

b)chrome inspectorツールを使用してデバッグし、document.getElementById('iframe_id')。contentWindowの値を確認しようとすると、その下にfunction_nameが表示されますが、document.getElementById('iframe_id')でアクセスできません。 contentWindow.function_name()。何故ですか?

c)親から(easyXDMやその他のプラグインなしで)iframe内のjavascript関数を正常に呼び出すにはどうすればよいですか?

詳細:私はのように双方向通信を探しています。私の親は結果を返すiframeの関数を呼び出し、その結果に基づいて親はリダイレクトするかどうかを決定します

4

2 に答える 2

1

postMessageを使用しました。より単純な解決策のように見えました。

私がやりたかったこと:'beforeunload'、子iframeにメッセージを送信し、コールバックとして応答を受信します。応答に基づいてメッセージを表示するか、ナビゲートします。

しかし、これは不可能でした。

これが私がそれを解決した方法です:

子フレームに変更が加えられるたびに、親にメッセージを送信しました。これらのメッセージを収集し、「beforeunload」で使用して、メッセージをナビゲートするか表示するかを決定しました

于 2013-02-06T18:17:44.193 に答える
0

location.hashポーリングを使用できます。親がURL#hashを変更し、子がsetIntervalループで変更をチェックする場合。http://ajaxian.com/archives/cross-domain-iframe-communication-without-location-polling

あなたは本質的に「easyXDM」に関して車輪の再発明をしているでしょう。

于 2013-02-05T20:08:32.917 に答える