-
深入解析
IE11
中被废止的方法
尽管我们已经了解了
Internet Explorer 1
1
中的一些新特性,包括对
WebGL
的支持、
预抓取、预渲染、
flexbox
、
mutation
observers
以及其他一些
Web
标准的支持,特别是废
弃了一些非标准的方法,这对一些较早开发的应用,产生了严重影响,甚至不能正常使用。
尽管可以使用
IE11
中的兼容性视图,但总
是感觉不太理想。至于到底有哪些变化,不经过
实践验证,总是不能深入。最近,因为项
目需要,升级了前几年开发的一套
WEB
应用系统,
使其能够适应
IE11
。在升级过程中,较为深入
的了解了
IE11
与较早版本的一些区别,以及
需要修改那些地方才能适应
IE11
。现整理出来一部
分,供需要的同行参考。
IE11
已
经不再是
IE
了
这也是微软首次真正移除了
Internet
Explorer
的一些特性,
转而对
Web
标准的支持更
好。特别是更改了
user-agent
字符串
,
这使得很多判断浏览器是否
IE
的代码无法工作,
包括有些
JavaScript
的
isIE()
的方法在
Internet Explorer
11
上执行会返回
false
。
p>
在
IE11
中,
u
ser-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
p>
遵守了这个
规定。此举导致一些根据
nav
igator
对象判断浏览器型号的
JavaScript
代码会将
IE11
识
< br>别成基于
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<
/p>
个是匹配的子表达式
b=(msie)
||(chrome)||(firefox)||(safari)||(
opera
)||(ie11);
return {NAME:
b[1], VERSION: parseInt(b[2])};
})()
}
获取的的时候使用:
;
N);
//
注意,
IE11
< br>的版本是
trident
,版本是
7
;
如果仅仅是想判断是不是
p>
IE
(包括早期版本)
,另一种办法是判断
能不能实例化
ActiveXObject
:
< br>
Var IsIE= !!XObject ||
不被推荐
从
IE4
开始,
在
I
E
中举足轻重。比起
mentById()
来
说,
是<
/p>
IE
方式的获取元素的引用的方法。尽管
IE5
增加对
DOM
的支持,但
一直沿用至
IE
10
。在
Internet
Explorer
11
中
并没
有真正被
删除,但不推荐使用。
这种方
法有一个十分讨厌的问题,即当元素只有一个
时,
tName[
0]
会报出异常,
需要用
tName<
/p>
直接获
取;而
mentsByName(
“elementName”)[0]则不会,因此,在你不能确定
有多少个元素时
(有可能没有或者只有一个)
,
显然使用
mentsByName
更为
通用。
attachEvent()
方法被废弃
该方法用于添加事件处理器,对应的
detachEvent()
用来移除事件处理器。这两个方
法将在
Internet Explorer
11
中删除。移除这两个方法需要改用如下逻辑:
其他被删除的特性还包括:
ript()
–
IE
版本的
eval()
ll()
–
IE
p>
用来滚动窗口的方式
ystatechange
–
IE<
/p>
方式的脚本加载完成的事件通知
tate
–
IE
方式的测试脚本是否加载完成的状态
ion
–
IE
方式获取当前选择的文本,改
ection()
StyleSheet
–
p>
IE
方式创建样式单
heet
–
IE
方式引用样式
所有这些被废弃的方法都有基于标准的替代方法。
HTML
书写严格规范
早期的浏览器版本,能够容忍一些
HTML
代码的不
规范。如
style=
”display:none”,
不能写成
style=
”display:‘
none’”。这种写法在
IE
较早版本没有问题,
IE11
不行了。
innerText
不被推荐使用
<
/p>
以前,我们经常使用
innerText
来获取元素所包含的文本内容,如获取单元格内容用
Eleme
ntById(“td”).innerText,IE11
中已经不被推荐使用了。<
/p>
innerText
其本身就是微软自己发明的东东,改邪归正总
是好的,取代的办法是改用
innerHTML
。但需
要注意的是,如果含有子标签,
innerHTML
会将子标签一块输出的。如:
< br>id=”mytd”
>1234
memtById(“mytd”).innerHTML
的输出值为
:
1234
< br>元素的
id
和
name
同时存在
如果元素只有
id
,没有
name,mentsByName()
会为空,引发异常。在
ie10
以前版本,
p>
mentsByName()
取不到
nam
e
,就会去取
id
,只要
id
存在
就可以。
IE11
显然要求更加规范。
firstCh
ild
和
nextSibling
在
标准的
javascrip
中,空格(缩进的空格)也被算作节
点,因此经常性会有空节点,
如:
1234 | 5678 |
这时使用
ElementById(“tb”).firstChild.
TML
时,
会报对象为空异常,这在
IE
p>
以前版本是可以取到值
1234
的。
解决办法:
1
、
使用<
/p>
mentById(“tb”).pe
进行判断,
为
3
时
是空格
2
、
ElementsById(“tb”).
< br>getElementsByTagName(
d
inn
erHTML
来代替
3
、
同样道
理,
nextSibling
用来获取同级节点的下一个节点,
以前可以用
ElementById
(“tb”).firstChild. nextSibling
.innerHTM
L
来获取
5678
,现在需要用循环或
数组来获取下一个节点的内容:
ElementsById(“tb”).
< br>getElementsByTagName(
4
、
p>
使用
Jquery
没有这个问题,会自动去掉空格节点
不再支持
Expression
IE
5
及其以后版本支持在
CSS
中使用<
/p>
expression
,用来把
CSS<
/p>
属性和
Javascript
表达
式关联起来,这里的
CSS
属性可以是元素固
有的属性,也可以是自定义属性。就是说
CSS
属性后面可以是
一段
Javascript
表达式,
C
SS
属性的值等于
Javascript
表达式计算的结果,
这看起来是一件十分美妙的事情,可以帮助我们处理很多事情,但
CSS Expression
的问题
就在于它的计算频率要比想象的多出很多。
不仅仅是在页面显示和缩放时,
就是在页面滚动、
乃至移动鼠标时都会要重新计算一次,
对浏览器性能还是有压力的。
现在,
这样的事在
ie11
终结了。在
ie11
中不能使用了,需要将
JS
代码或函数移到外边来。
onscroll
滚动条事件
IE
早期版本中,把
onscroll
放在
body
中是可以执行的,例如:
=”
myFunction()”>
现在
IE11
中不行了。需要单独注册监听,例如写成:
ll = function(){
myFunction();
}
-
-
-
-
-
-
-
-
-
上一篇:【精编范文】发荣滋长可形容人的成长吗-范文模板 (17页)
下一篇:黄桥烧饼的故事