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;
    }
});

该片段是开发人员在网站上使用的 Mootools js 库的一部分。是否有解决方法来修复 IE 的错误?

4

1 回答 1

9

是的,那段代码是垃圾,你永远不应该做这样的浏览器检查,它是用 JavaScript 101 教授的……哈哈,不能相信那是在 mootools 中吗?无论如何

IE9 不再允许使用疯狂的document.createElement('<div style="background:red">yay!</div>');语法(从一开始就没有人应该真正使用过它......)

这是一个例子:

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如果我记得正确的 mootools 有Browser.Engine.version类似的效果,请不要这样做......

编辑:我觉得我还应该补充一点:这Browser.Engine.trident是有问题的检查,从代码的角度来看,它也可能发生在其他地方......

啊哈!另一个更新:我在查看 [一个旧的] 支持线程时发现了这一点:

您需要更新到 1.2.5 或 1.3。IE9 不支持以前的 MooTools 版本。

所以对脚本的更新应该可以解决你的问题,希望它不会引入更多的错误......你可以在这里得到它:http: //mootools.net/download,你可能想试试那个 1.2.5 版本页面顶部,因为它将具有最少的更改...

祝你好运-ck

于 2012-10-17T19:46:50.813 回答