2011-04-26 15 views
3

クライアントは、ドメインfoo.comにあり、upload.foo.comに(POSTのXMLHttpRequestを送信)をアップロードする必要があります。同じ起源の問題(ファイルアップロード)

これは、理由は同一生成元ポリシーの制限されています。 iframe.onLoad [..]

(a=(b=doc) 
.createElement('script')) 
.src='http://foo.com/upload.php?'+Math.random(), 
b.body.appendChild(a); 
void(0); 

しかし、その周りの仕事は、私は動的に foo.com開口部 upload.foo.comiframeを作成するために、あるを考え出すと、このように upload.foo.comからPOSTリクエストを実行するJavaScriptコードを追加するために管理しました

は今、私にはこれは冗長なようだ:後から可能であるならば、私の論理は、前者が同様に可能でなければならないことを私に伝えます。それは...ですか?

- 更新

は、私はちょうどこれを含むサブドメイン上のファイルがあることに気づいた:

<?xml version="1.0" ?> 
<cross-domain-policy> 
<allow-access-from domain="*" /> 
<allow-access-from domain="*.foo.com" secure="false" /> 
</cross-domain-policy> 

は、私は私の利点に何とかそれを使用することはできますか?

+0

実行しましたか?他のドメインのiframeも操作できるとは思わないからです。 –

+0

'iframe'のコンセプトは有効です。私は数日前から使用しています。 – Gajus

+0

このようにすることは可能ですか? on foo.com load iframe src bar.foo.com;親ページに関数を呼び出すコールバックを追加します(iframeの内容を変更する権利があります)。そのコールバック関数から、そのiframeのようにXMLHttpRequestを作成しますか? – Gajus

答えて

1

XMLHttpRequestは、セキュリティ上の理由からオブジェクトが相互にオプトインする必要があるため、document.domainの値を設定するターゲットを知る方法がないため、document.domainには影響を受けません。 SiteAがSiteBのサイトのDOMとやりとりするには、両方のサイトが共通のプライベートドメインサフィックスを共有していなければなりません。また、document.domainを共通サフィックスに設定することで、両方のサイトで通信をオプトインする必要があります。

クロスドメインポリシーファイルは実際には意味がありません(すべてがオプトインしてからすべてのサブセットになる)が、XHR(CORSを使用)ではなくFlashに使用されます。

0

私はそれがこれを簡略化することが可能だとは思わないが、それはあなたに洗練と思われる場合は、クロスオリジンJSを使用するためのシンプルな方法があります。

確かに、これはほぼ正確にあなたがJSONP使用してリクエストを送信しようとした場合のjQueryが何をするかです。 Wikipedia for JSONP
(同一生成元の制限を回避するには、いくつかの他の方法と一緒に)

これはあなたがについて尋ねているものであれば、私は知らないが、保守性の名の下に、私はあなたが使用することをお勧めしますjQuery approach

あなたはdataTypeと設定する必要があります: 'JSONP'を、あなたはすべてのセットです。 オプションで「=コールバック?」パラメータを設定することができます(ドキュメントを見てください)。

関連する問題