new takyam();

Qiitaぽい話はQiitaに書いていくことにする気がする http://qiita.com/takyam

IE8でjquery fileuploadでTypeError アクセス拒否な感じのアレやソレ

マジドハマりしましたよ・・・。

Ajaxでファイルをアップロードしようとする時に、IE9以下はXHR Lv2に対応してないので、IFRAMEの中にフォーム生成してうんたらかんたらする必要があります。
で、jQuery File Upload Pluginとか使うとその辺良いようにやってくれるんですが、やってくれるはずなんですが、何故か送信してくれない事案が発生。

ソース追ってくと、IFRAME内のform.submit()(formはjQueryオブジェクト)で止まってるっぽ。なんじゃこりゃ。

ソースはこちら

同じソースでChromeとかは問題なく動くんでIE8の何かにぶちあたったわけですが、結論から言いますと、<input type="file">display:none;だったのがダメっぽいです。

今回は、デザインされたボタンをクリックすると、display:none;$file = $('input[type="file"]')$file.trigger('click')な感じでファイル選択ダイアログが開き、最終的にそれをjQuery File Uploadに渡してPOSTしてたんですが、これだと$fileがhiddenな感じなので、IE8の(わけわかんない)セキュリティによりsubmit()が動作せず(TypeError Access Deniedとかアクセス拒否とかなエラー)、jQuery File Uploadが正常に動作できなかったというオチでした。

なので、IE8の時は<input type="file">display: none;にしないようにしないと、無駄にハマるようでした。

IE駆逐されればいいのに(^q^)