提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

本来想让旧版本的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》