2012-12-01 34 views
6
@using (Html.BeginForm("Upload", "MyProfile", FormMethod.Post, new 
{ 
    @encType = "multipart/form-data", 
    id = "ImgForm", 
    name = "ImgForm", 
    target = "UploadTarget" 
})) 
{ 
    <input type="file" name="FileUpload" class="filestyle-notext fileupload">     
} 

<iframe id="UploadTarget" name="UploadTarget" style="position: absolute; left: -999em; top: -999em;"></iframe> 

JavaScriptとjqueryを使用して、ファイル入力の変更時にフォーム送信を行っています。JavaScriptでフォームを送信するときにIEでアクセス拒否エラーが発生しました。

アクセスが拒否され、Internet Explorer(ie8を使用しています)でのみ発生し、Firefox、Chromeで正常に動作します。

フォーラムで読んだ後、セキュリティ上の理由からIEのjavasriptからフォームを送信する際に問題があることがわかりましたが、回避策はありますか?そして、私はなぜIEだけが、すべてのブラウザがそれをサポートしているのか理解できません。 IEはすべてのブラウザよりも安全ですか? ;)あなたの提案にプールしてください。

+0

私の最初の考えはプロテクトモードを無効にすることです。 – mrtsherman

+3

* IEはすべてのブラウザよりも安全ですか?* LOL ...健全です。 – McGarnagle

答えて

9

IE8は、このファイル入力の.change()イベント内からのファイル入力を含むフォームの.submit()イベントの呼び出しをサポートしていません。これはセキュリティ上の理由によるものです。ユーザーが明示的にこれを許可することなく、サーバーにファイルを提出しようとしています。一つの可能​​な回避策は、あなたが置かれているいくつかのボタンの.click()イベント内からフォーム上の.submit()を呼び出すことです:ユーザーは、いくつかのアップロードボタンをクリックしたときに

$('.uploadButton').click(function() {  
    $('#ImgForm').submit(); 
}); 

はこれでフォームが提出されます。

これはIE8でのみ問題になることに言及する価値があります。より高いバージョンや他のブラウザにはこの制限はありません。

UploadifyBlueImp File uploadなどのFlashベースのアップロードコントロールを使用して、クロスブラウザ方式でファイルをサーバーにアップロードすることも考えられます。

+0

これはまだIE10の問題であり、それを騙そうとするとうまくいかないことに注意する価値があります。コードを通じてclickイベントを呼び出すことはできません。 –

関連する問題