私はJSONPのファンではない、それはデータとプレゼンテーションの間の結合を作成し、私は前にこの問題を調査し、まあ、あなたが使用できるトリックがあります、これに従ってください:
のは、私たちをしましょうB. Aという名前のiframe内にAという名前のメインウィンドウと「子」のウィンドウを持っているとBが同じホストから提供されなければならないが、別のサブドメインを持つことができる、のようなもの:
AがSUB1から提供しています.example.com
Bは、sub2.example.comから配信されます。
ブラウザではドキュメントのドメインを変更できますが、それでも制限があるので、ホストに到達するまでサブドメインを削除してドメインを変更することができます。そう:
document.domain = "example.com";
あなたが最初にそのドメインへのAJAX呼び出し(sub2.example.com)最初の要求が送られた後、あなたは両方のドキュメントを持っているように、ちょうどAのようにドメインを変更をするBに
同じドメイン。 Bの元のドメインにリクエストを行ったので、ブラウザはリクエストを送信し続けることができますが、ドメインを変更してAとBも同じドメインを持ち、互いに通信できます。
ドメインを変更する前に、最初に少なくとも1つのリクエストを元のドメインに変更することが重要です。 また、両方のページが同じホストから提供されていない場合は機能しません。ほとんどの場合、問題は解決しませんが、もう少し余裕で操作できます。
私はこのトリックを2回以上使用していますが、問題が発生していない限り、すべてのブラウザで動作していることがわかっています。
in A
==================
document.domain = "example.com";
var child; // keep reference to B
function setChild(win) {
childDocument = win;
}
function handleMessage(message) {
do what ever it is you need to
}
in B
==================
make ajax request
document.domain = "example.com";
parent.setChild(this);
function ajaxCallback(message) {
parent.handleMessage(message);
}
これはバグやエクスプロイトのように聞こえる:
はここに擬似例です。あなたはこれをどのブラウザでテストしましたか? – Halcyon
IE、Chromeで動作します。私はfirefoxでテストしなかった – emphaticsunshine
'window.location.host'についてはわかりませんが、' document.domain'を変更すると、同じ親ドメイン上の2つの異なるサブドメインが通信できるようになりました。 https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript – djd