jco*_*der 5 javascript mootools internet-explorer-9 domexception
在下面的脚本中,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;
}
});
Run Code Online (Sandbox Code Playgroud)
此代码段是开发人员在网站上使用的Mootools js库的一部分.是否有解决方法来修复IE的错误?
是的,代码是垃圾,你永远不应该做这样的浏览器检查,它在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]);
Run Code Online (Sandbox Code Playgroud)
修复此问题的方法是创建一个虚拟元素并使用.innerHTML然后提取子项,或者在mootools内部检查浏览器版本,IE > 8如果我记得正确的mootools有一个Browser.Engine.version或那样的效果,那就不要这样做...
编辑:我觉得我应该补充一点:这Browser.Engine.trident是有问题的检查,从代码的gyst看起来可能会发生在其他地方...
啊哈!另一个更新:我在查看[旧的]支持线程时发现了这个:
你需要更新到1.2.5或1.3.IE9不支持以前的MooTools版本.
所以脚本的更新应该解决你的问题,希望它不会引入更多的错误...你可以在这里得到它:http://mootools.net/download,你可能想尝试1.2.5版本的页面顶部,因为它将有最少的更改...
祝你好运
| 归档时间: |
|
| 查看次数: |
8158 次 |
| 最近记录: |