IE10的那些坑

作者:互联网   出处:控件中国网   2014-11-05 19:06:18   阅读:1

 1、XML的坑

 
2、UserAgent改变带来的影响
 
3、移除了对条件注释的支持
 
4、Flash的不完整支持
 
5、IE9的改变
 
 
 
  随着W in8的推出,IE10也跟着现身了,现在IE10又增加了对win7的支持,那么新的浏览器又有那些新特性呢?作为一个一直以来都问题颇多的IE浏览器来说,这一版本又有多少改变?现在咱们来看看
 
 
 
改变最大的是它越来越网W3C标准去靠近了,比如从IE9就已经实现的对DOM L2,DOM L3和DOM L2 和 L3 事件处理(包括冒泡模型)的完整支持,以及增加了对Html5和CSS3的支持。
 
 
 
在拥抱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中的元素
 
Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat