IE10的那些坑

IE10的坑

1XML的坑

2、UserAgent改变带来的影响

3、移除了对条件注释的支持

4、Flash的不完整支持

5、IE9的改变

 

  随着W in8的推出,IE10也跟着现身了,现在IE10又增加了对win7的支持,那么新的浏览器又有那些新特性呢?作为一个一直以来都问题颇多的IE浏览器来说,这一版本又有多少改变?现在咱们来看看

 

改变最大的是它越来越网W3C标准去靠近了,比如从IE9就已经实现的对DOM L2,DOM L3DOM L2 和 L3 事件处理(包括冒泡模型)的完整支持,以及增加了对Html5CSS3的支持。

 

在拥抱W3C的同时,它也就抛弃了之前的很多独有的东西

1. XML的坑

上次遇到的,IE之前对通过XMLHttpRequest获得的得到的responseXML 对象自动封装成MSXML对象,因此有一些特别的方法,但是在IE10中,所有的XML一律采用的是标准的对象,很多特有的方法也就不再被支持,比如说selecNodes(),selectSingleNode

解决方案:

l 可以转变为msxml对象,使用try catch 避免在其他浏览器造成错误

var xhr = new XMLHttpRequest();

xhr.open(method, url, true);

try { xhr.responseType = 'msxml-document'; } catch(e){}

//...

var doc = xhr.responseXML;

// 'doc' now contains an MSXML document in IE10’s Standards and Quirks document modes

 

l 彻底的解决方案就是使用标准的,可以用getElementsByTagName方法来代替

http://blogs.msdn.com/b/ie/archive/2012/07/19/xmlhttprequest-responsexml-in-ie10-release-preview.aspx

2.  UserAgent改变带来的影响

 

IE10自然会更新下UserAgent信息,新的信息为:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

由于MSIE后的版本号从一位数变成了两位数,所以如果是使用字符串检测的话需要注意避免犯下面这个错误

// INCORRECT: will report IE10 version in capture 1 as "1"

var matchIE = /MSIE\s(\d)/;

 

改成下面这种就OK了

// CORRECT: will report IE10 version as "10"

var matchIE = /MSIE\s([\d]+)/;

当然最靠谱的还是使用功能检测,而不是浏览器检测

 

2. 移除了对条件注释的支持

条件注释对于解决IE家族的兼容性问题一直相当有用,但是IE10却果断抛弃了对条件注释的支持(可能是觉得受到了歧视)。不过还好IE对标准的支持已经很好了,可能也不太需要条件注释了。

<!--[if IE]>

     这段文字在IE10中会被直接无视掉.

   <![endif]-->

 

如果想在10中继续使用条件注释,可以强制使用IE9的行为来修复,加入下面这个meta标签<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

 

4.Flash的不完整支持

IE10刚开始的版本并没有加入对flash的支持,因为它推荐使用html5而不是flash,但是应大家强烈的要求还是加入了flash,要提示用户使用flash,可以加入以下信息

<meta http-equiv="X-UA-Compatible" content="requiresActiveX=true" />

但是对flash的支持有诸多的限制,对有些flash功能不兼容

以下的 Flash 功能开始与 Internet Explorer 10 并不兼容,可能无法在支持 Flash 的网站上提供有效的综合体验:

  • 照相机
  • 麦克风
  • 打印
  • 特色书签(例如,Flash 定位点)
  • 依赖双击(播放器使用双击来缩放到合适大小,但不会将双击作为双击事件传播到  Flash 内容)
  • 使用滚动更新事件和滚动事件
  • 依赖 P2P(适用于 Windows 应用商店应用的 Windows UX 指南不允许创建套接字服 务器)

     依赖以下 Flash 触控 API:平移、缩放、旋转、轻扫以及按下并点击

 

详细内容:Internet Explorer 10 兼容性手册

 

附:另外IE9也改变了蛮多东西,摘录一些常会遇到的点以及常规解决办法,供大家参考

 

1. 在使用createElement时候不再识别(< >),比如

var elm = document.createElement("<div id='myDiv'>");//会报错

2. 为了和其他浏览器兼容,不再支持方法的指针缓存

var d = document.writeln;

d("<script language=VBScript>");//无法正常执行

d.call(document, "<script language="VBScript">);//解决:使用call

 

3.获取自定义属性时候不能使用 . 运算符,而应使用getAttribute()方法,否则获取失败

4. 不再支持arguments.caller属性

5. 间接引用eval方法会报错,比如

var indirectEval = eval;

indirectEval("myDate = new " + dateFn + ";");//所以直接使用就得了

6. Object中如果包含有类似emebed的回退内容,在IE9中会被识别到DOM中,当使用window[“name”]获取时候,会同时得到emebed,虽然你只想获得object

解决:使用功能检测,若是支持document[“name”],则使用,否则就用window[“name”]

 

7. 文档中的空白被可以被识别为DOM中的元素

参考:IE9的兼容性文档

posted @ 2013-03-26 17:34  forty2  阅读(2880)  评论(7编辑  收藏  举报