5

以下のスクリプトでは、IE9がエラーをスローしています。

SCRIPT5022:DOM例外:INVALID_CHARACTER_ERR(5)mootools-1.2.1-core-yc.js、118行目文字1

Document.implement({
    newElement: function (A, B) {
        if (Browser.Engine.trident && B) {
            ["name", "type", "checked"].each(function (C) {
                if (!B[C]) {
                    return;
                }
                A += " " + C + '="' + B[C] + '"';
                if (C != "checked") {
                    delete B[C];
                }
            });
            A = "<" + A + ">";
        }
        return $.element(this.createElement(A)).set(B); //THIS IS LINE 118
    },
    newTextNode: function (A) {
        return this.createTextNode(A);
    },
    getDocument: function () {
        return this;
    },
    getWindow: function () {
        return this.window;
    }
});

このスニペットは、開発者がサイトで使用したMootoolsjsライブラリの一部です。IEのエラーを修正するための回避策はありますか?

4

1 に答える 1

9

ええ、そのコードはゴミです。そのようなブラウザ チェックは絶対に行うべきではありません。JavaScript 101 で教えられています。とにかく、漂白剤

IE9 ではもうクレイジーなdocument.createElement('<div style="background:red">yay!</div>');構文は許可されていません (そもそも IE9 を実際に使用するべきではありませんでした...)

例を次に示します。

var d = document;
var x = d.createElement('div');

x.innerHTML = 'yay';
x.style.backgroundColor = 'red';
x.style.padding = '6px';
x.style.margin = '20px';

d.body.appendChild(x);

var sameHTML = '<div style="background:green;padding:6px;margin:20px;">yay!</div>';

// fails in IE > 8 and other browsers
try {
  var y = d.createElement(sameHTML);
  d.body.appendChild(y);
} catch (err) {
  d.body.appendChild(d.createTextNode(err)); 
}

// quick fix using innerHTML:
var temp = d.createElement('div');
temp.innerHTML = sameHTML;
d.body.appendChild(temp.childNodes[0]);

これを修正する方法は、ダミー要素を作成して使用.innerHTMLし、子を抽出するか、mootools 内でブラウザのバージョンを確認し、IE > 8正しい mootoolsBrowser.Engine.versionにその効果があることを覚えているかどうかを確認することです...

編集:これも追加する必要があるように感じます:これBrowser.Engine.tridentは問題のあるチェックであり、コードの要旨から、他の場所でも発生する可能性があるように見えます...

あはは!別の更新: [古い] サポート スレッドを調べているときに、これを見つけました:

1.2.5 または 1.3 に更新する必要があります。MooTools の以前のバージョンは、IE9 ではサポートされていません。

そのため、スクリプトを更新すると問題が解決するはずです。これ以上バグが発生しないことを願っています... http://mootools.net/downloadから入手できます。その 1.2.5 バージョンを変更の量が最も少ないため、ページの上部...

がんばって -ck

于 2012-10-17T19:46:50.813 に答える