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中的元素