当前项目组开发的产品对外承诺支持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. PostgreSQL创建只读用户

    创建用户及指定密码: CREATE USER readonly WITH ENCRYPTED PASSWORD 'ropass'; 设置用户默认事务只读: alter user readonly se ...

  2. PatentTips - Compare and exchange operation using sleep-wakeup mechanism

    BACKGROUND Typically, a multithreaded processor or a multi-processor system is capable of processing ...

  3. 把握linux内核设计思想(三):下半部机制之软中断

    [版权声明:尊重原创.转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途]         中断处理程序以异步方式执行,其会打断其它重要代码,其执行时该中 ...

  4. 【AHOI2013】【BZOJ3238】差异

    Description Input 一行,一个字符串S Output 一行.一个整数.表示所求值 Sample Input cacao Sample Output 54 HINT 2<=N< ...

  5. awk技巧

    1通过awk脚本执行awk程序:awk-f program_file_name input_files #!/bin/awk -f BEGIN { print "What is your n ...

  6. 小白学开发(iOS)OC_ 经常使用结构体(2015-08-14)

    // //  main.m //  经常使用结构体 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rig ...

  7. 118.类包装器与lambda函数包装器(伪函数实现)

    #include <iostream> #include <list> using namespace std; //函数包装器,左边参数右边函数 template<cl ...

  8. beego orm commonDAL通用方法汇总

    orm 通用方法——QueryModelById 主键查询 orm 通用方法——GetOneModel 条件查询一个对象 orm 通用方法——QueryModelCount条件查询记录数 orm 通用 ...

  9. spring security源码分析心得

    看了半天的文档及源码,终于理出了spring-security的一些总体思路,spring security主要分认证(authentication)和授权(authority). 1.认证authe ...

  10. android的HTTP框架之Volley

    Volley是android官方开发的一个HTTP框架,简化了利用java中原生的HTTP操作API-HttpURLConnection和HttpClient的操作. 一.首先是Volley的简单使用 ...