クロスドメイン通信のもう 1 つの手法は、(ab)usingwindow.name
です。最初に同じドメインの src を持つ iframe が必要です。その後、window.name を設定する別のドメインに移動してから、元のソースに戻ります (履歴に戻ります)。window.name
これは、明示的に設定しない限り変更されないという考え方です。これは、window.name
ドメイン間でデータを転送できることを意味します。
この手法については、次のサイトで詳しく説明されています。 aspx
- http://jectbd.com/?p=611
IE でクリック音を回避する実装を必ず選択してください。
残念ながら、それはまだあなたの歴史を台無しにしていますが、それは一歩前進してから、それがあった歴史のポイントに戻ります. ただし、大きな利点は、URI 文字列を解析してエンコードする必要がなく、JSON をすぐに使用できることです。
たとえば、JSON lib を使用する
// access window.name from parent frame
// note: only when iframe stepped back to same domain.
var data = JSON.parse( iframe.contentWindow.name );
// set child frame name
// note: only when iframe stepped back to same domain.
iframe.contentWindow.name = JSON.stringify( {
foo : "bar"
} ); // to JSON string
// set own name ( child frame )
window.name = JSON.stringify( {
foo : "bar"
} ); // to JSON string
Cookie 手法も実行可能です。どちらの手法でも、履歴の変更を避けたいが http 要求が必要な場合は、ターゲット iframe で ajax 要求を実行する必要があります。それで:
- データを iframe x に送信します (Cookie または window.name 手法を使用)
- iframe x のポーラーでデータをキャッチする
- iframe x で ajax リクエストを実行します。
- データを iframe y に送り返す (cookie または window.name 手法を使用)
- iframe y のポーラーでデータをキャッチする
- ホーキーポーキーをします。
ページの更新 (httprequest) または URL の変更によって履歴が更新されるため (IE の古いバージョンまたはすべてのバージョンを除く)、残念ながら追加のコードが必要になります。