10

サーバー側のスクリプトを実際に許可しない環境があります (サーバーにスクリプトを「インストール」するのは非常に困難です)。iframe を使用して、javascript の同一オリジン ポリシーに違反しようとしました。しかし、それはうまくいきませんでした。私が認識していない他の回避策はありますか?

ありがとう!

4

2 に答える 2

29

David Dorwardが述べたように、JSON-P は最も単純で最速です。ただし、特に 2 つの iframe を使用する別のトリックがあります。

2 つは、JSONP を使用せずにこの問題を回避します。次のことができます。この手法は、親ページへの何らかの開発アクセス権があることを前提としています。

2 つのドメイン/サイトに 3 つのページがあります。

  1. 親ページ
  2. コンテンツページ
  3. クロスドメイン通信ページ (別名「xdcomm」)

親ページと xdcomm ページは同じドメインでホストされ、コンテンツ ページは他のドメインでホストされます。コンテンツ ページは親ページに iframe として埋め込まれ、xdcomm ページはコンテンツ ページに非表示の iframe として埋め込まれます。

ここに画像の説明を入力

xdcomm ページには、クエリ文字列内の GET パラメータを検出し、その文字列を解析して変数 ( は JSON でエンコードされた文字列) を解析し、親ページで指定された引数を使用して指定されたメソッドを実行する非常に単純なスクリプトが含まれてmethodargsますargs。ここで例を見ることができます(ソースを表示)。

JavaScript の Same Origin Policy は、あるドメインのコードが別のドメインのコードにアクセスすることを制限していますが、ドメインが相互にネストされていても問題ありません (ドメイン A、ドメイン B 内にネスト、ドメイン A 内にネスト)。

つまり、コンテンツ ページは、iframe のソースを のようなものに変更することで、xdcomm ページを介して親ページにメッセージを送信しますhttp://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]。これはfoo(1,2,3,4)、親ページで実行するのと同じです。

また、easyxdmなど、これを支援するライブラリが既に存在することも知っておいてください。ここで説明したことは、彼らが使用する手法の 1 つの基礎であり、それほど派手ではないかもしれませんが、完全に機能する軽量の実装であることは確かです。

于 2010-01-14T20:09:52.297 に答える
2

うまくいけば、それはセキュリティホールになるので、そうではありません!:)

ただし、両方のサイトが同じドメインのサブドメインである場合は、document.domainが役立つ可能性があります。

于 2010-01-14T19:43:52.470 に答える