2

jqueryフォームプラグインを使用してクロスドメインファイルアップロードフォームを機能させようとしていますが、firebugコンソールで次のエラーが発生し続けます:

Permission denied to access property 'document'

jquery.form プラグインの次の行で発生します

403: var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;

サファリを使用すると、次のエラーが発生します。

Unsafe JavaScript attempt to access frame with URL http://s1.test-host/index.php/upload/start?is-async=1 from frame with URL http://test-host/index.php/main/. Domains, protocols and ports must match.

for の html は次のようになります。

  <form action="http://s1.test-host//index.php/upload/start" method="post" accept-charset="utf-8" id="upload-form" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="1204000"  />
      <label for="file-input">Input File</label>
      <input type="file" name="file" value="" id="file-input" alt="Input File"  />
      <input type="submit" name="upload" value="Convert" id="start-upload" />
  </form>

JavaScript は次のようになります。

$(this).ajaxForm ({
    beforeSubmit: onFileFormSubmit,     // pre-submit callback
    success:      onFileFormSubmitEnd,  // post-submit callback
    resetForm:    true,             // reset the form after successful submit
    dataType:     'json',           // force response type to JSON
    iframe:       true              // force the form to be submitted using an iframe
});

ターゲットのphpページには次のものがあります:

    if ($_SERVER['HTTP_ORIGIN']) {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
        header('Access-Control-Max-Age: 1000');
        header('Access-Control-Allow-Headers: Content-Type');
    }
   ... // Usual upload handling code

しかし、何も機能していないようです。「dataType」を「jsonp」に変更しようとしたり、「post」から「get」にメソッドを変更したりしましたが、それはすべて役に立たず、同じエラーが引き続き発生します。サーバーを見ると、ファイルは実際にアップロードされますが、JavaScript は成功関数を呼び出すことができません。

グーグルで調べたところ、「JQuery File Upload」や「plupload」などの他のソリューションがある可能性があることがわかりましたが、HTML5 機能を使用したくない単純なものが本当に必要です。

4

2 に答える 2

1

ファイル アップロード プラグインは、iframe を使用してファイルをアップロードしています。適切な CORS ヘッダーがないとクロスドメインを投稿できず、CORS ヘッダーを iframe に提供できないため、これは単純に不可能です。最良のオプションは、代わりにサーバーに投稿し、必要に応じてサーバー側のコードを使用してクロスドメインに移動することです.

于 2013-01-21T22:45:31.563 に答える
0

凝ったものは何も望まないことは承知していますが、XHR が完全にサポートされていないブラウザーでクロスドメインを使用する場合は、jQuery-File-Uploadプラグインを使用することをお勧めします。iframe を使用して、ファイルを別のドメインにアップロードします。ただし、さらに作業が必要です。

  • プラグインが期待するものにアップロード サーバーの応答を変更する必要があります。
  • 応答を取得するには、元のサーバーのどこかにresult.htmlをアップロードする必要があります

UI が不要な場合は、基本バージョンのプラグインを使用できます。

于 2013-01-23T03:36:55.080 に答える