ここには 2 種類の状況があります:
1. 同じ親ドメインに基づくサブドメイン間のページへのアクセス。次の 3 つのドメイン ドメインを参照してください: taabao.com、jipiao.taabao.com、promotion.taabao.com。同じです。親ドメインは taabao.com です。
2. 異なる親ドメインに基づくページ間のアクセス。次の 3 つのドメイン ドメインを参照してください: taabao.com、baidu.com、sina.com.cn。これらは異なる親ドメインを持っています。
それらの間のクロスドメイン問題を解決する解決策は次のとおりです:
オプション 1: サーバー プロキシ
ドメイン A のページ JS はリンクにアクセスする必要がありますドメイン B でデータを取得するために、このソリューションはドメイン A のサーバー側にプロキシ プログラムを確立します (ASP、サーブレットなどの任意のサーバー プログラムを使用できます)。ドメイン A のページ JS は、この下のプロキシ プログラムを直接呼び出します。プロキシ プログラムは、ドメイン B にリクエストを送信し、リンクしてデータを取得し、最終的にプロキシ経由で使用できるようにデータをページ JS に返します。
アクセスプロセスは次のとおりです: ドメイン A の JS --> ドメイン A のプロキシ -- > ドメイン B のリンク
例:
ステップ 1:
ドメイン A: http://Jipiao.taabao.com/test.htm
ページの JavaScript スクリプト:
ステップ 2:
ドメイン A サーバー (ここではサーブレットであると仮定します) のプロキシ プログラムを完成します。疑似コードは次のとおりです。 :
パブリック クラス Proxy extends….{
..doGet(…… ..){
HttpClient=……;
GetMethod get=new GetMethod("www.baidu.com/xxxxx.do"); // ドメインへのリンクにアクセスしますB
int statusCode = client.executeMethod(get);
if (statusCode != HttpStatus.SC_OK) {
byte[] responseBody = get.getResponseBody(); responseBody);
Httpresponse.getWriter ().write(res);//データをドメイン A に返す
}
}
}
オプション 2: スクリプト経由タグ:
ドメイン A ページの先頭に空の Script タグを記述します http://Jipiao.taobao.com/test.htm:
< !--
注: このソリューションではドメイン B を返す必要があります。データは正当な JSON 形式または JS ファイル形式である必要があります。たとえば、ドメイン B によって返されるデータ形式は次のとおりです。 :'hello'};
Var f=[2,1];
オプション 3: iframe を非表示にしてドメインを共有:
ドメイン A ページに非表示の iframe を書き込みます。 .taabao.com/yyyy.htm:
コードをコピー
コードは次のとおりです:
id="remoteHtml" src="" style="diapay:none" style="diapay:none"/>
注: この方法を機能させるには、ページ http://promotion.taabao.com/xxxx.htm でも document.domain="taabao.com" を設定する必要があります。
この iframe メソッドが異なる親ドメイン間のクロスドメインに適していない理由は、document.domain の設定が自分の親ドメインにのみ設定でき、jiapiao.taabao などの他のドメインには設定できないためです。 document.domain="baidu.com" ではなく、 document.domain="taabao.com" のみを設定します。
ここにリストされている 3 つのソリューションには、それぞれ独自の長所と短所があります。
プロキシ ソリューションの利点は次のとおりです。ほぼすべてのクロスドメイン アクセスに適用でき、1 つのドメインで開発するだけで済み、もう 1 つのドメインはあらゆる種類の形式でデータを提供できます。欠点は、このソリューションは中間の Proxy を経由するため、遅延が若干大きくなり、ローカル サーバーの負荷が増加し、開発作業負荷も若干大きくなる可能性があることです。
スクリプト タグのソリューションは、数行のコードなしで実行できます。ただし、返されるデータの形式は Json 形式でなければなりません。他の形式のデータである場合、この方法では何もできません。
iframe を非表示にする方法も非常に簡単で、返されたデータ形式を処理できますが、同じ親ドメイン内のクロスドメイン要求にのみ適用でき、他のドメインが開発 (ドキュメント) で協力する必要があります。 .domain を設定する必要があります。
元の投稿の詳細: http://blog.csdn.net/lovingprince/archive/2008/09/20/2954675.aspx
-------------- -------------------------------------------------- ------------------
----------------------------- --- ---------------------------------------------------
JS のクロスドメイン アクセスの意味について、さらにいくつかの点を追加したいと思います。
クロスドメイン アクセスとは、簡単に言うと、Web サイト A の JavaScript コードが Web サイト B にアクセスしようとすることを意味します。コンテンツとコンテンツの取得。たとえば、Web サイト A からページにアクセスする場合、Web サイト B の別のページで JS オブジェクトを実行するか、Web サイト A のページで JS を使用してページの dom 要素を解析する必要があります。ウェブサイト B など。この種のクロスドメイン アクセスの問題が発生するアプリケーション シナリオは、通常、iframe でのページの埋め込み、または Ajax リクエストの異なるドメインへの送信などです。
セキュリティ上の理由により、 - ドメインへのアクセスは、主要なブラウザではデフォルトで禁止されていますが、ブラウザはページ内の他のドメインからの JS の参照を禁止しておらず、インポートされた JS ファイル内の関数を自由に実行できます。
クロスドメインかどうかの判断ルールは、ドメイン名、プロトコル、ポートの 3 つを比較することです。3 つのうちの 1 つが異なる場合、よく言われるクロスドメインの問題が発生します。このシナリオは発生する可能性が最も高く、前述した taobao.com ドメインの第 2 レベル ドメイン名の問題など、いくつかの解決方法があるためです。 🎜> メイン ドメインが異なる、またはプロトコルが異なる (https と http など) クロスドメインの問題 (たとえば、*.taabao.com ドメインが *.baidu.com ドメインのコンテンツにアクセスしたいなど)、それは完全に問題ですWeb 側から解決することは不可能であり、サーバー側のプロキシ ソリューションを通じてのみ解決できます。
異なるドメイン間で共通のページ コントロール dom 要素には次のものがあります。
window.location は設定できますが、読み取ることはできません。他の場所のプロパティとメソッドへのアクセスは禁止されています。
document.href は設定できますが、読み取ることはできません。他のドキュメントのプロパティとメソッドへのアクセスは禁止されています。