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 機能を使用したくない単純なものが本当に必要です。