10

私は、もともと請負業者に与えられたが完了しなかった仕事を終わらせなければならないという素晴らしい仕事をしています。問題はありませんが、システムは Firefox 3.6 をサポートする必要があると言われました! 素晴らしいことではありませんが、今まで眠れなかったものではありません! このシステムには、FormData オブジェクトを使用してドキュメント (通常は PDF) をアップロードする Ajax 関数があります。これをFirefox 3.6で実行したところ、次の結果が得られました

「FormData が定義されていません」
var formData = new FormData($('form')[0]);

このオブジェクトがサポートされていないことがわかるので、それは問題ありません。別の方法またはコレクションの手段を使用する必要があるだけです...私はこれを使用しました:

var formData = Components.classes["@mozilla.org/files/formdata;1"]
        .createInstance(Components.interfaces.nsIDOMFormData);

ただし、これにより次のエラーが発生しました。

http://10.29.100.23:8080でプロパティ XPCComponents.classes を取得する権限が拒否されました

これがなぜなのかわかりませんでした... パス " @mozilla.org/files/formdata;1" が間違っていますか? 私はさらに調査を行い、どこにも行きませんでした!そこで、フォームをシリアル化することを考えましたが、次のように変更されました...

var formData =  {};

$.each($('form')[0].serializeArray(), function(_, kv) {
     if (formData.hasOwnProperty(kv.name)) {
         formData[kv.name] = $.makeArray(formData[kv.name]);
         formData[kv.name].push(kv.value);
     }else {
        formData[kv.name] = kv.value;
    }
});

これはエラーにはなりませんでしたが、Ajax 関数がアップロードしていませんでした (ファイルを認識または検索していないか、ファイル値の文字列を収集しているだけだと思います)。古いブラウザー、特に Firefox 3.6 での FormData の代替案に関する推奨事項はありますか?それは私がサポートしなければならない唯一の古いブラウザーです。

**アップデート****

これは HTML ページのフォームのコンテンツです

<form action="" method="post" enctype="multipart/form-data" name="uploadForm" id="uploadForm" target="#">
    <label for="fileField">Rechnung hochladen</label>
    <input type="file" name="fileField" id="fileField">
    <progress id="progressbar" class="progressbar_margin hidden"></progress>
</form>
4

2 に答える 2

3

FormDataはXMLHttpRequestレベル2インターフェースであり、XHR / Ajaxを使用してフォーム(ファイルのアップロードを含む)を簡単に送信できます。お気づきのとおり、Firefoxではバージョン4以降でのみご利用いただけます。(MDNドキュメントにはブラウザ互換性テーブルがあります。)

jQueryフォームプラグインを試すことをお勧めします。古いブラウザでファイルをアップロードするためのiframeフォールバックをサポートしています。

于 2012-06-18T12:33:08.990 に答える
0

コードの前にこれを使用する必要があると思います:

netscape.security.PrivilegeManager.enablePrivilege(
    'UniversalXPConnect'
);

確実にこれも実行してください:

  1. アドレス バーに「about:config」と入力します。
  2. 「signed.applets.codebase_principal_support」を検索します。
  3. 値を true に設定します。

それがうまくいくことを願っています、頑張ってください。

于 2012-05-11T22:38:50.797 に答える