IE11兼容问题

 

IE11下载地址:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=40901。安装IE10和IE11之前需要先保证操作系统是Service版本的。win7 sp1升级包下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=5842

  

搜集资料:

  IE11随Windows 8.1预览版一同到来,13年7月份,IE11登陆Windows 7,为该平台提供与Win8.1版IE11同样的性能完善、更快的页面加载速度、对更多新标准的支持、全新的F12开发者工具

  在保证兼容性、互操作性、安全性的基础上,IE11大大提升了JavaScript引擎Chakra的性能,还新增了对ECMAScript 6标准的支持,包括let、const、Map、Set、WeakMap、as __proto__ for。

  微软提供了IE11与其它几款浏览器的JavaScript性能基准测试,测试选用的是权威的WebKit SunSpider测试软件,平台为Windows 7。根据测试结果,IE11比IE10快4%,Chrome 28、Firefox 22、Opera 15更是被远远抛在身后

  本人亲测,IE11对javascript的执行速度用肉眼都能看出来,同样的页面,同样的代码,IE11执行速度很快,各大主流浏览器javascript的执行速度图,如下:

 

  我们已经确认Internet Explorer 11中的一些新特性,包括对WebGL的支持、预抓取、预渲染、flexbox、mutation observers以及其他一些Web标准的支持。但是更有趣的是,虽然被叫为Internet Explorer 11,但它已经不再是IE了,为什么这么说呢?如下道来。。。

  这也是首次微软真正移除了Internet Explorer的一些特性:更改了user-agent字符串,这使得很多判断浏览器是否IE的代码无法工作,包括有些JavaScript的isIE()的方法在Internet Explorer 11上执行会返回false。不过好在Internet Explorer 11对Web标准的支持非常好,因此不再需要之前那些IE特定的行为。navigator.userAgent字符串发生了本质性的变化,这就是为什么我们的平台不兼容IE11的原因了,计划赶不上变化,老的东西终将随着新事务的发展变化而改变自身来适应它们的变化。

  1、IE6-IE10的userAgent字符串如下:

  2、IE11的userAgent字符串如下:

  

  3、Firefox的userAgent字符串如下:(firefox已经是过去时了,这里为什么要拿firefox来对比呢,因为IE11长得有点像它了)

  

  IE11增加了Gecko的标识,而Safari是首个标注了Gecko的浏览器。哎,IE11居然连window.ActiveXObject都不支持了?还叫Internet Explorer浏览器吗?我和我的小伙伴们都吓一跳, 幸好新建的时候还能创建出对象。

  

  之前多数使用MSIE来判断是否IE浏览器的代码都无法工作,可以改用Trident字符串来判断。Trident标识是在IE9中引入的。

  此外微软还更改了navigator对象:

  • navigator.appName值为“Netscape”

  • navigator.product值为“Gecko”

  这或许是一项开发者的诡计,但该行为的确是在HTML5中实际指定的。在HTML5中要求这两个属性必须返回上述对应的值,这是一个很奇怪的规定的,更奇怪的是Internet Explorer 11遵守了这个规定。

  此举导致一些根据navigator对象判断浏览器型号的JavaScript代码会将Internet Explorer 11识别成基于Gecko的浏览器。

 

document.all和friends

  从IE 4开始,document.all在IE中举足轻重。比起document.getElementById()来说,document.all是IE方式的获取元素的引用的方法。尽管IE 5增加对DOM的支持,但document.all一直沿用至IE 10。而在Internet Explorer 11中终于被废弃了,这意味着在Internet Explorer 11中使用document.all的方法将可能导致执行失败,尽管使用了document.all的代码实际上还是可以工作。

  另外一个要废弃的是attachEvent()方法,该方法用于添加事件处理器,对应的detachEvent()用来移除事件处理器。这两个方法将在Internet Explorer 11中删除。移除这两个方法需要改用如下逻辑:

  当然,建议你优先使用标准的浏览器进行测试以确保不会因为attachEvent()的移除而影响代码执行。不过互联网上充斥着各种糟糕的监测代码,你只能确保自己的应用经过良好的标准测试。

被删除的特性还包括:

所有这些被废弃的方法都有基于标准的替代方法。如果你使用的是标准的方法那恭喜你,可直接支持Internet Explorer 11.

结论

  看起来Internet Explorer 11应该是Internet Explorer家族最棒的版本。通过最终移除过去一些魔鬼般的错误,微软正在为大家准备一个真正标准的浏览器。

更新:document.all并没有真正被删除,但不推荐使用。

 

出处: http://www.th7.cn/web/js/201311/15045.shtml

你可能感兴趣的:(javascript)