IE兼容性开发的札记
当前项目组开发的产品对外承诺支持IE9和IE11,但在推广应用过程中发现存在相当比例的用户实际上还在使用IE8,而这相当比例中的用户还包括了大部分的公司领导。为了满足公司内部各阶层人士体验我们产品的诉求,开发团队的上层领导经过协商,决定投入专门的精力来完成IE8的支持。本文是笔记,记录了整改过程中发现、解决的一些问题。
IE兼容模式
简单的说,即是在jsp页面的头部增加如下的代码,指定浏览器以最高模式来呈现页面。对于我们项目组的产品来说,如下的代码可以保证IE8、IE9、IE11的用户在打开页面时,都可以得到最佳的体验。
<meta http-equiv="X-UA-Compatible" content="IE=edge">
至于这行代码的具体含义,可以问度娘,相信会有满意的答复。
如果没有这行代码,当前项目开发的jsp页面在IE8模式下打开时,会报一些稀奇古怪的、和jquery、JSON相关的错误,加上这行代码之后,这些错误就消失了。
字符串的trim方法
项目组内开发人员在页面上大量应用到了字符串的trim方法,IE9及其以上版本的IE浏览器都默认提供了trim方法,但IE8并没有提供,因此页面上使用trim方法的地方都会报js错。解决方法比较简单,直接使用jquery提供的trim方法,比如"axdfa ".trim()替换为$.trim("axdfa "),问题即可解决。
变量定义
IE8的js语法检查非常严格,如果一个变量未使用var来显式定义,在代码中使用时会报js错;在IE9和IE11中,变量会在第一次使用时自动完成初始化,所以不会报错。
不过这个问题不是特别确定,因为在家里的浏览器上尝试重现问题的时候,直接在代码里访问未定义的变量,IE8并没有报错,运行结果还正常的。
数组的遍历
对于数组var a = [1,2,4,],在IE8下,使用下标方式和jquery的each方法遍历数组时,会多遍历得到一个null对象;而使用IE9、IE11则不会存在这个问题。因此数组的最后一个元素之后切记不可增加“,”,否则会导致页面的js在IE8时出现诡异的表现。
数组的indexOf方法
IE8不支持数组的indexOf方法,为了满足在数组中查找对象的需要,代码中通常会为数组扩展indexOf方法。这引入一个问题,在使用foreach方式遍历数组时,indexOf方法也会作为数组的一个成员被遍历到,这比较讨厌;而使用下标方式和jquery的each方法来遍历数组,则不会引入这个问题。
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function () {
// ...
}
}
因此我个人建议是不要为数组提供indexOf方法的实现,直接使用jquery的inArray方法,也可以达到相同的效果,但需要注意的是inArray方法在使用时,被查询对象在前,数组对象在后。
欢迎访问Jackie的家,http://jackieathome.sinaapp.com/,如需转载文章,请注明出处。
版权声明:本文为博主原创文章,未经博主允许不得转载。