web-dev-qa-db-ja.com

フォームがInternetExplorer 9でファイルをアップロードしないのはなぜですか?

「InternetExplorerがそんなに吸うのはなぜですか?」...のエピソード32,342,343へようこそ

IE9がファイルをアップロードするというくだらない仕事をしているという報告をたくさん見ました。どうやらそれはいつ機能するか機能しないかについて多くの警告があります(誰かが決定的なリストを持っているなら私はそれを見たいです)。しかし、私が見つけた問題/解決策のほとんどは、javascript、通常はjQueryフォームプラグインまたは同様のものに関連しています。

私のフォームはAJAX経由で送信されず、ファイル入力フィールドはcssで非表示になったり隠されたりしません。それでも、フォームを送信しようとしているIE9のユーザーから1日に数枚のサポートチケットを受け取ります。 "何も起こりません」(=フォームは送信されます。エラーはありませんが、ファイルはアップロードされません。)別のブラウザで苦情が1回も発生しておらず、IE8でものようです動作します(これまでと同様に)。

これが私のフォームの上部です。私は何かが足りないのですか?

<form action="http://mysite.dev/account-settings/?open=resume" method="post" class="wpjb-form" enctype="multipart/form-data">    

        <input type="hidden" name="resume_form" value="resume_form" />
        <fieldset class="wpjb-fieldset-default">

            <input id="firstname" name="firstname" type="hidden" class="regular-text " value="John" />
            <input id="lastname" name="lastname" type="hidden" class="regular-text " value="Henry" />
            <input id="email" name="email" type="hidden" class="regular-text " value="[email protected]" />

            <div class="wpjb-element-input-checkbox wpjb-element-name-is_active">
                <label class="wpjb-label">Show resume? </label>
                <div class="wpjb-field">
                    <label for="is_active_1"><input type="checkbox" class="" name="is_active" id="is_active_1" value="1" checked="checked" /> Yes <small style="display:inline;">(Uncheck to hide your resume)</small></label>

                </div>
            </div>
            <div class="wpjb-element-input-select-one wpjb-element-name-file">
                            <label class="wpjb-label">Upload a <i>new</i> resume file</label>
                <div class="wpjb-field">
                    <input style="line-height:1em;" id="file" name="file" type="file" class="regular-text " />
                    <small class="wpjb-hint">Accepted file types: doc, docx, odf, pdf, rtf</small>
                </div>
            </div>
        </fieldset>
        ...

このように、さらにいくつか<fieldset>sは次のように終了します:

    ....
    <p class="submit">
        <input type="submit" name="Submit" id="wpjb_submit" value="Save Changes" />
    </p>
</form>

更新この問題を経験したことがないすべての人に満足していますが、それは私だけではありません: http://answers.Microsoft.com/en-us/ie/forum/ie9-windows_Vista/cannot-upload-files-using-internet-Explorer-9/5724d921-ae71-e011-8dfc-68b599b31bf5

Update2メタタグを追加してユーザーエージェントをIE8に強制するための提案がたくさんあります... <meta http-equiv="X-UA-Compatible" content="IE=8" /> IE8はサポートしていますが、サイトの要素の多くはIE8とIE9でレンダリングが異なるため、これは行いたくありません。これにより、IEユーザーは、その特定のページでIE8に一時的に「タイムワープ」するので、かなりずさんなユーザーエクスペリエンスが作成されます。

19
emersonthis

JQueryフォームの送信をsetTimeoutでラップすることで、この問題の悪夢を修正することができました。

$('#complete_profile input[type="submit"]').click(function(){
  setTimeout(function() {
    $('#complete_profile form').submit();
  }, 0);
});

これにより、フォームが送信されるときに重複送信が発生する可能性がありますが、注意してください。

2
Tronathan

データが送信されていない場合は、サーバーサイドスクリプトの非表示の入力で投稿データを確認できます。たとえば、phpを使用している場合は、次のようになります。

<? if($_POST['resume_form']=='resume_form'){
    //Do something
} ?>

または、IEのメタ互換タグを使用して、IE8のようにページをレンダリングすることもできます

<meta http-equiv="X-UA-Compatible" content="IE=8" />
0
Onur Kucukkece

X-UA-Compatibleメタタグ値を設定し、それが違いを生むかどうかを確認することをお勧めします。

可能な値については、この質問を参照してください: <meta http-equiv = "X-UA-Compatible" content = "IE = Edge">は何をしますか?

また、ページがIE9で非標準モードをトリガーしている可能性もあります。 IE9でページを開き、開発ツールを開いて、どのブラウザー/ドキュメントモードが選択されているかを確認することをお勧めします。それはあなたに手がかりを与えるかもしれません。 「enctype」フォーム属性はIE8より前ではサポートされていなかったため、ブラウザーが古いドキュメントモードを使用している場合、その属性は認識されないことに注意してください。

0
Roy Tinker

OK答えではなくコメントを残したいのですが、まだポイントがありません!

  1. ユーザーは癖モードになっていますか?ほとんどのIEユーザーは癖モードに気づいておらず、(F5キーを押す代わりに)ページを更新しようとしたときに誤ってクリックした可能性があります。断続的な場合は、これが理由である可能性があります。

  2. 上から続きます。サーバー側では、空のフィールドをどのようにチェックしていますか?私はここであなたがしばしば ""、null、undefinedを探すJSの行にいます私はおそらくあなたが探していないのであなたのサーバー側のエラーチェックが欠落しているいくつかのファジーデータを送信していると思っていますそのため、すべてがOKであると報告します。

0
Zenonline

Grahamがそうであるように、これはサーバーの問題である可能性が高いと思います。また、IE9(またはそれ以降)でのファイルのアップロードに問題があったことは一度もありません。PHPのコードを投稿したくないと思います。アップロードを処理するスクリプト?

0
Daniel Steiner