2011-06-18 15 views
4

私はファイルアップロードAPIを構築しています。クロスドメインiframeファイルのアップロードjsonレスポンスを処理する方法は?

基本的に、ユーザーは自分のWebサービスに自分のapi_key +署名付きのファイルをPOSTする必要があります。その後、私のWebサービスはJSON応答で返信します。このプロセスはどのように非同期で動作するのでしょうか?

ユーザーがリクエストをフォームでPOSTして、ターゲットをiframeに設定すると仮定します。 JSONレスポンスはコンテンツタイプが「text/html」に設定されているiframeのユーザーに返されます。 "application/json"の代わりに "text/html"と設定されています。なぜならJSONレスポンスの周りにブラウザが "pre"タグを挿入しないようにしたいからです。とにかくiframeと親ウィンドウのドメインが異なる場合、ユーザーはJSON応答をどのように読み取るのですか?クロスドメインポリシーの問題が発生する可能性があります。

「script」タグを動的に作成します。アップロードするためにPOSTする必要があるため、JSONPはこの場合動作しません。 JSONPはGETリクエストでのみ動作します。

+0

私自身の質問に答えるには私はiframe(ドメインB)から親(ドメインA)にjsonを送るためにhtml5 postmessageを使います。ドメインAでは、メッセージをオブジェクトに変換するeval()を実行します。これを行うには何か問題がありますか?セキュリティ上の問題? – woran

答えて

0

同じ原産地規則のため、ブラウザはメインフレーム内のJavaScriptが別のドメインのiframeの内容を読み書きすることを許可しません。この場合、ユーザーはeasyXDMを使用するか、独自のプロキシーを作成する必要があります。プロキシーでは、POSTリクエストがサーバーに直接送られるようにAPIと通信できるバックエンドにコードを記述する必要があります。 、get応答は自分のプロキシから取得します。

+0

代わりにhtml5 postmessageを使用するとどう思いますか?ユーザーはiframeを対象としたPOSTリクエストを使用してファイルをアップロードできます。次に、Webサービスは、top.postMessage( '"。$ json。"'、 'http:// "。$ callback_domain。"')を囲むスクリプトタグを持つtext/htmlコンテンツタイプで応答します。このメッセージを取得するには、親ウィンドウにイベントリスナーが必要です。そして、そのjson文字列をeval()してオブジェクトに変換することができます。 – woran

1

アップロードの例hereをご覧ください。クロスドメインメッセージングを使用してメッセージをアップロードページに戻し、easyXDMを使用してすべてのブラウザをサポートします。

This postすべての仕組みを説明しています。

関連する問題