- ベストアンサー
ie8 javascript submitできず
ie8で、javascriptを使ってsubmit()しファイルをアップロードしようと思ったのですが、Webサーバがまったく反応しません。Firefoxとchromeでなんの問題もなかったのでIE8固有の問題だと思うのですが、解決された方はいますでしょうか?手がかりが記載されているサイトでもいいので教えてください。 ちなみにhttp://support.microsoft.com/kb/890981/jaで問題になっている相対パスは入れていません。IE8が出力したファイルパスをそのまま使用しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
JavaScriptを使って<input>に文字列を入力し、そのままform.submit()してるんでしょうか? その方法はセキュリティーホールとなる可能性が高く、各ブラウザが<input>への入力を制限するなどし、 それにより、form.submit()は<input>が空のまま送信されるということがありました。 FirefoxやChromeは頻繁にアップデートされ、その度にセキュリティー関係のチェック方法が変わっていますから、 以前は送信できなかったものが送信できるようになった、ということがあるかもしれません。 <form 略 target="iframe"> <input type="file" name="file"> <input type="submit" value="submit"> </form> <script> document.forms[0].file.value='c:\セキュリティーや個人情報に関するファイルパスを推測したもの; document.forms[0].submit(); </script> IE8はこの制限を引き続きかけているなら、送信できないことが正しい動作になると思います。 <input type="file">のファイル選択ダイアログから選択すれば、相対パスが入力されるということはありませんから、正常に送信できると思います。 ご参考まで。
その他の回答 (1)
- guci-ok
- ベストアンサー率33% (49/146)
私も、IE8では色々苦労しています。 動作をデモできる、簡単なHTMLを提出できないなら、 アドバイスを貰うのは、難しいのでは。 言葉だけでは、実際どこがどうなのか解らない。 1つアドバイスできるとすれば、デバッグはしてみたのでですか? alertを使った原始的な方法や、Firebugによる方法など。
お礼
回答ありがとうございます。 動作をシンプルなデモ用意できればいいのですが、実際動かしているプログラムが煩雑で検証環境を提示できるような感じではなかったためヒントだけでも得られればと質問致しました。 後でわかったのですが、表示上では、C:\users\contoso\documents\file.txtと絶対パスが付されていたため、絶対パスだよなと、value値調べなかったのですが、value値を調べると、c:\fakepath\file.txtと書き換えられていました。これはどうやらie8の仕様らしく、 参考 http://msdn.microsoft.com/en-us/library/ms535128%28VS.85%29.aspx http://scripting.cocolog-nifty.com/blog/2009/05/ie8valuecfakepa.html ie8側で[インターネットオプション][セキュリティ][インターネット][レベルのカストマイズ]「サーバにファイルをアップロードするときにローカルディレクトリのパスを含める」 を「有効にする」。をやってみたのですが、 確かにvalue値は絶対パスが入るようになったものの、今度はwebサーバ(PHP)にファイルデータが送られてきません。 送った変数値は全てwebサーバ側(PHP)で確認できるのですが、ファイルデータに関して$_FILES['Upload']['tmp_name']を調べても何もありません。今はここまで詰まっている状態です。
お礼
回答ありがとうございます。 ご指摘のとおりie8の仕様でファイルパスが自動で書き換えられて死んでいたようです。 参考 http://msdn.microsoft.com/en-us/library/ms535128%28VS.85%29.aspx http://scripting.cocolog-nifty.com/blog/2009/05/ie8valuecfakepa.html 上記参考サイトからie8の設定を変えて、確かにvalue値は絶対パスが入るようになったものの、フォーム上の変数値は全てwebサーバ側(PHP)で確認できるのですが、今度はwebサーバ(PHP)にファイルデータが送られてこない状況に陥っています。 何か気になることがあったら引き続きヒントを頂ければと思います。