当前项目组开发的产品对外承诺支持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 "),问题就可以解决。

变量定义

页面上有一个div,id为xxxx,代码样比例如以下。

<div id="xxxxx"></div>

此时js代码中如出现例如以下的代码。而且xxxxx没有使用var来声明,那么js在运行到例如以下一行时会报错,提示信息是对象不支持此属性或方法。

xxxxx = 1;

这个问题初始发现时让我纠结了相当长时间。分析思路一度跑偏。以为是IE8的js引擎对于语法要求比較高,而IE9和IE11的语法要求比較低;但奇怪的是。网上并没有搜索到相关的话题,所以并不确定。后来经高手启示,并重复尝试之后。才发现当页面上存在前述场景时,IE8模式下js代码是一定会报错的。

明白了问题之后,改动方法就很明白了,要么改动div的id,要么使用变量前用var来显式初始化。

数组的遍历

对于数组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/,如需转载文章,请注明出处。

IE兼容性开发的笔记的更多相关文章

  1. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  2. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  3. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  4. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  5. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

  6. 驱动开发学习笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇

    驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Doc ...

  7. 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

    驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...

  8. 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

    驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...

  9. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

随机推荐

  1. 监控web服务(http,本地 / 远程监控nginx)

    监控 httpd 服务一: #!/bin/bash #描述: 秒级别监控 http 服务 while [ 1 -lt 2 ] do sleep 10 ai=`netstat -ntl | grep & ...

  2. python_webApp

    提高开发效率:当更改代码后,不重启服务器就能使用新效果 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df ...

  3. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统

    原文:NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统 前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的 ...

  4. Vue2.0组件实现动态搜索引擎(一)

    原文链接:https://blog.csdn.net/qwezxc24680/article/details/74550556 从github上看到一个不错的开源项目:https://github.c ...

  5. HDU 4309 Seikimatsu Occult Tonneru

    Seikimatsu Occult Tonneru Time Limit: 6000ms Memory Limit: 32768KB This problem will be judged on HD ...

  6. ArcGIS api for javascript——用缓存区查询地图

    描述 本例展示了如何在另外一个任务里使用一个任务的结果.单击地图查看被单击的点的1公里范围内的缓存(如果需要可以修改这个默认的缓存距离).也可以看缓存区的这些点的人口普查街区信息.单击一个点查看更多的 ...

  7. 静态时序分析SAT

    1.   背景 静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告. 进行静态时序分析,主要目的就是为了提高系统工作主频以及增加系统的稳定性.对 ...

  8. 学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

    TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用.<TensorFlow:实战Google深度学习框架(第2版)>为TensorFlow入门参考书,帮助快速. ...

  9. mysql 问题排查语句

    1.查询不是sleep或者有状态的sql select * from `information_schema`.processlist where command !='Sleep' or state ...

  10. cp---复制文件

    cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文 ...