解决IE7-JS导致的JavaScript Invalid argument错误
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
本来想让旧版本的IE6、IE7以及IE8也能应用一些新特性的,于是尝试使用了 ie7-js 这款兼容性脚本。关于ie7-js这个我在 前面的文章中介绍过 ,主要是为了让低版本的IE看起来更符合标准,其修复了一些低版本IE的不符合标准的问题。
<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js">
</script>
<![endif]-->
通过上面的代码引入后,效果确实是有了,但是出现了JS错误,特别是在IE6下JavaScript会报类似下面错误:
Line: 2080 Char: 11 Error: Invalid argument Code: 0
刚开始怀疑是脚本冲突所导致,排除其他脚本后,错误依旧,于是搜索谷歌,在ie7-js官方issues站找到了原因,首先[email protected] 给出了出错的代码片段 :
function (g, f) {
if (g.parentElement) {
var d = f.match(dd);
for (var c = 0; c < d.length; c++) {
var a = d[c].replace(de, "");
if (g.currentStyle["ie7-" + a] === "inherit") {
a = a.replace(df, dg);
alert(a); //alerts 'font'
g.runtimeStyle[a] = g.parentElement.currentStyle[a]
}
}
}
}
看样子是和CSS的Font有关系,进一步通过 《Issue 307:"font: inherit;" (as used in Eric Meyer's CSS Reset 2.0) causes JavaScript error in IE 6 and 7》 得知原来是和自己先前用的Eric Meyer's CSS Reset有关系。因为ie7-js的系列脚本未能够很好的处理font: inherit;这种情况,所以导致出现Invalid argument错误,同样的错误发生在IE8.js/IE9.js,IE7.js我没有测试,可能也会有这样的Bug。
在这个帖子中[email protected]给出了临时解决这个Bug的一个方法,那就是将font: inherit;属性替换为下面的属性:
font-weight: inherit;
font-style: inherit;
font-family: inherit;
我试了一下,确实错误没有了,问题算是解决了,但是接下来我发现个别页面渲染很奇怪,不知何故,哎,看来还是放弃吧。
另外在提供一个解决方案,这个需要修改ie7-js源码的,敬请移步 《Issue 354: font: inherit; fails on IE7 and lower》 。