2024年3月8日发(作者:)

深入解析IE11中被废止的方法

尽管我们已经了解了Internet Explorer 11中的一些新特性,包括对WebGL的支持、

预抓取、预渲染、flexbox、mutation observers 以及其他一些Web标准的支持,特别是废

弃了一些非标准的方法,这对一些较早开发的应用,产生了严重影响,甚至不能正常使用。

尽管可以使用IE11中的兼容性视图,但总是感觉不太理想。至于到底有哪些变化,不经过

实践验证,总是不能深入。最近,因为项目需要,升级了前几年开发的一套WEB应用系统,

使其能够适应IE11。在升级过程中,较为深入的了解了IE11与较早版本的一些区别,以及

需要修改那些地方才能适应IE11。现整理出来一部分,供需要的同行参考。

IE11已经不再是IE了

这也是微软首次真正移除了Internet Explorer的一些特性,转而对Web标准的支持更

好。特别是更改了user-agent 字符串,这使得很多判断浏览器是否IE的代码无法工作,

包括有些 JavaScript 的 isIE() 的方法在Internet Explorer 11上执行会返回 false。

在IE11中,user-agent 比之前的版本要短很多,而且去掉了最关键的MSIE的关键字(这

在IE10中还有):

Internet Explorer 11 的 user-agent:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

鉴于此,之前多数使用 MSIE 来判断是否IE浏览器的代码都无法工作。

此外微软还更改了navigator 对象:e 值为 “Netscape”,而

t 值为 “Gecko”,据说这样修改为了满足HTML5而进行的,是 HTML5 中

实际指定的。在 HTML5 中要求这两个属性必须返回上述对应的值,显然IE 11遵守了这个

规定。此举导致一些根据navigator 对象判断浏览器型号的JavaScript 代码会将IE11识

别成基于Gecko的浏览器。下面的代码可以用来判断不同的浏览器以及他们的版本:

//浏览器版本信息

= {

BROWSER : (function() {

var u = leLowerCase(),

msie = /(msie) ([d.]+)/,

chrome = /(chrome)([d.]+)/,

firefox = /(firefox)([d.]+)/,

safari = /(safari)([d.]+)/,

opera = /(opera)([d.]+)/,

ie11 = /(trident)([d.]+)/,

//match方法返回的是数组,0个元素是匹配的完整表达式,1和2个是匹配的子表达式

b=(msie)||(chrome)||(firefox)||(safari)||(

opera)||(ie11);

return {NAME: b[1], VERSION: parseInt(b[2])};

})()

}

获取的的时候使用:

N);

//注意,IE11的版本是trident,版本是7;

如果仅仅是想判断是不是IE(包括早期版本),另一种办法是判断能不能实例化

ActiveXObject:

Var IsIE= !!XObject || "ActiveXObject" in window

不被推荐

从IE4 开始, 在IE中举足轻重。比起 mentById() 来

说, 是IE方式的获取元素的引用的方法。尽管IE5增加对DOM的支持,但

一直沿用至IE10。在Internet Explorer 11中 并没有真正被

删除,但不推荐使用。这种方法有一个十分讨厌的问题,即当元素只有一个

时,tName[0]会报出异常,需要用tName直接获

取;而mentsByName(“elementName”)[0]则不会,因此,在你不能确定

有多少个元素时(有可能没有或者只有一个),显然使用mentsByName更为

通用。

attachEvent()方法被废弃

该方法用于添加事件处理器,对应的 detachEvent() 用来移除事件处理器。这两个方

法将在Internet Explorer 11中删除。移除这两个方法需要改用如下逻辑: