相同政策の制限により、ドメインクロスコミュニケーションは常に困難な問題でした。もちろん、多くの解決策があります:
1. document.domain+iframeの設定はメインドメインに適用され、サブドメインは異なります。
2。iframeとlocation.hashを使用すると、データはURLに直接さらされ、データ容量とタイプは限られています。
3.フラッシュlocalConnection、オブジェクトは1つのSWFファイルまたは複数のSWFファイル間で通信できます。
同じクライアント、クロスアプリケーション、およびクロスドメインにいるだけです。
window.nameデータとクロスドメインのiframe static proxyダイナミック伝送スキームを保存し、ページURLの変更により変更されないwindow.nameの機能を完全に利用します。
インターネットには多くの例コードがあります。自分で検索できます。
HTML5で最もクールなAPIの1つ:クロスドキュメントメッセージング。 Advanced Browsers Internet Explorer 8+、Chrome、Firefox、Opera、Safariはすべてこの機能をサポートします。この関数は、主に情報を受け入れる「メッセージ」イベントとメッセージを送信する「ポストメサージ」メソッドを含む非常に簡単なものです。
メッセージを送信する「ポストメサージ」メソッド
外側のウィンドウにメッセージを送信します。
コードコピーは次のとおりです。AntherWindow.PostMessage(Message、TargetOrigin);
otherWindow:ターゲットウィンドウ、つまり、どのウィンドウが送信されるかを指します。これは、window.frames属性のメンバーまたはwindow.openメソッドによって作成されたウィンドウを指します。
パラメーター説明:
1.メッサージ:それは送信されるメッセージであり、タイプは文字列、オブジェクトです(IE8、9によってサポートされていません)
2.Targetorigin:それは限られたメッセージの受信範囲であり、「*」を使用しないでください。
情報を受け入れる「メッセージ」イベント
コードコピーは次のとおりです。
var onmessage = function(event){
var data = event.data;
var Origin = event.origin;
// someingを行います
};
if(typeof window.addeventlistener!= 'undefined'){
window.addeventlistener( 'message'、onmessage、false);
} else if(typeof windof.attachevent!= 'undefined'){
// IEの場合
window.attachevent( 'onmessage'、onmessage);
}
コールバック関数の最初のパラメーターは、イベントオブジェクトを受信し、3つの共通プロパティがあります。
1.Data:メッセージ
2.オリジン:ソースアドレス
3.ソース:ソースDomwindowオブジェクト
もちろん、ポストメサージにもいくつかの欠点があります。
1. IE8およびIE9は文字列型をサポートしますが、JSONオブジェクトと文字列間の相互変換を使用してこの問題を解決することができます。
2.IE6、IE7は互換性プランを書く必要があります。