3

ie8 でファイルを選択するには、isInput 関数の 2 番目のステートメントを else if ではなく if にする必要がありました。

qq.isInput = function(maybeInput) {
    if (window.HTMLInputElement) {
        if (Object.prototype.toString.call(maybeInput) === '[object HTMLInputElement]') {
            if (maybeInput.type && maybeInput.type.toLowerCase() === 'file') {
                return true;
            }
        }
    }
    //else if (maybeInput.tagName) {
    if (maybeInput.tagName) {
        if (maybeInput.tagName.toLowerCase() === 'input') {
            if (maybeInput.type && maybeInput.type.toLowerCase() === 'file') {
                return true;
            }
        }
    }

    return false;
};

この変更は意味がありますか?それとも何か他のものを壊しますか?

ie8 で JavaScript をデバッグしていたとき、関数は「window.HTMLInputElement」チェックに成功していましたが、「Object.prototype.toString.call(maybeInput) === '[object HTMLInputElement]'」チェックに失敗していました。

IE8 ウィン XP SP3

4

1 に答える 1

0

この問題に対処する 3.6.3 ホットフィックス リリースが公開されました。

これは、複数のウィンドウを含む環境を処理するようにコードを変更したときに作成された、さらに別の回帰でした。

Fine Uploader は、特に IE8 に準拠していない (IMHO) サウンド ロジックが原因で、IE8 で壊れていました。 qq.isInputまず、 に「インターフェース」windowの概念があるかどうかを確認します。存在する場合、(を使用して) パラメータHTMLInputElementを呼び出したときに、すべての入力要素が "[object HTMLInputElement]" の値を持つことが期待されます。値が「[object Object]」であるため、明らかに、IE8 はこのロジックをサブスクライブしません。 toStringObject.prototype.toString

IE7 にも (ホスト オブジェクトの呼び出し時に) 同じ欠陥のある/一貫性のないロジックが存在しtoStringますが、この特定の問題は IE7 では問題になりません。IE7 はHTMLInputElement「インターフェイス」を公開しないため、次のチェックにスキップしますインターフェイスが存在しない場合に入力要素として識別しようとして、潜在的なホスト オブジェクトをもう少し詳しく調べHTMLInputElementます。

于 2013-06-05T18:51:22.913 に答える