Internet Explorer 11 浏览器介绍:别叫我IE


Posted in Javascript onSeptember 28, 2014

在上个星期,微软随Windows 8.1正式推出了Internet Explorer 11的第一次预览版。这样,关于这款备受争议的web浏览器泄露版本的各种传闻也该休息了。我们现在已经知道一些关于Internet Explorer 11的重要的细节,包括支持WebGL ,prefetch(译者注:预读取,比如上传文件的预览啥的,不知道翻译的对不对),prerender(预呈现), flexbox,mutation observers和其他web标准,也许在IE11中更有趣的是,它是不是IE。

长期以来,微软第一次从Internet Explorer浏览器中移除了一些特征。user-agent字符串也更改了。看来,微软已经抛弃了自己的方式,这样现有的检测IE的代码分支在Internet Explorer 11浏览器中都将返回false,无论是在 javascript里还是服务器上。

User-agent的改变

相对于以前的版本,Internet Explorer 11的user-agent字符串更短,而且还有一些有意思的变化:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko

对于在Windows 7上Internet Explorer 10的user-agent字符串

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

最明显的区别是,一直存在Internet Explorer浏览器user-agent字符串的“MSIE”标记去掉了。同样引人注目的是在user-agent的尾部添加了“like Gecko”。这表明Internet Explorer宁可被识别为Gecko浏览器,也不愿被识别为Internet Explorer自己。Safari是第一个添加“like Gecko”的浏览器,这样任何人都可以嗅探user-agent字符串里面的“Gecko”字符允许浏览器通过。

现在任何查找“MSIE”的嗅探代码在新的user-agent字符串下不能工作。你仍然可以搜索“Trident”字符来确定它是IE浏览器(“Trident”标识是随着Internet Explorer推出来的)。Internet Explorer的真正版本通过“rv”来标识。

此外,navigator对象的信息也有一些变化,这样更掩饰了正在使用的浏览器的。

navigator.appName 被设置为“Netscape”
navigator.product被设置为 “Gecko”

这可能看起来像企图偷偷摸摸欺骗开发人员,但是这些实际上是HTML5指定的。navigator.product属性必须为“Gecko”,同时navigator.appName也应该是“Netscape”或者更具体的。但Internet Explorer 11缺遵循了这个奇怪的建议。

navigator信息的更改导致的副作用,正在使用的基于Javascript逻辑的浏览器检测将可能无法使用,导致 Internet Explorer 11识别为基于Gecko的浏览器。

document.all和他的朋友们

从IE4以来,document.all在IE浏览器中无所不能。此前实行的document.getElementById()类似,document.all是得到一个DOM元素引用的IE方式。尽管从IE5开始到IE10,document.all都保持着对 DOM的支持。然而在11中,这个时代遗留下来的产物已经被设置为返回false,这就意味着任何基于document.all的代码分支判断在IE11中将失败,即使代码实际使用document.all能正常工作。

另一个遗留是添加事件函数的attachEvent(),类似于detachEvent()方法。这个方法已经从IE11中移除了。移除这些方法,是为了避免一些逻辑判断,比如:

function addEvent(element, type, handler) {

    if (element.attachEvent) {

        element.attachEvent("on" + type, handler);

    } else if (element.addEventListener) {

        element.addEventListener(type, handler, false);

    }

}

当然,我们推荐你最好用来测试的版本是一直稳定,符合标准的。在某种层面上说,移除attachEvent方法不会产生任何地不适应。然而,互联网充斥着槽糕的特征检测逻辑代码。attachEvent方法的删除确保任何以上述方式编写的代码将使用标准的版本,取代IE特有的方法。

其他一些被移除的特征:

window.execScript()——eval()方法的IE版本

window.doScroll()——IE窗口的滚动方法
script.onreadystatechange——IE中监听加载脚本的状态更改
script.readyState——IE中脚本加载的状态
document.selection——IE中当前选中的文本
document.createStyleSheet——IE中创建样式表文挡
style.styleSheet——IE浏览器中引用一个样式表的样式对象
所有这些IE浏览器的方式都被标准的特征所取代。在移除这些特征和方法后,基于标准功能特征检测的跨浏览器代码在不改变的情况下依然可以正常运行。

结论
在很长的时间段内,IE11可能是最好的IE浏览器。微软终于开始准备消除过去犯的错误,准备开始从包括基于现在标准的浏览器做起。删除旧的特征和修改不被认定为IE浏览器的用户代理字符串是一个很独特的做法,它确保所有的网站能继续工作。如果Web应用程序使用功能检测,而不是浏览器嗅探,那么代码应该可以IE11中运行。对于使用user-agent嗅探的应用,用户仍然能看到一个功能完好的网站,因为IE11对标准支持的十分优秀。

一个没有IE分支代码的未来即将到来,让我们一起期待。

(2013-7-2更新),修订提到的document.all实际上并未删除,而改为falsy

好久没翻译文章了,这次翻译的是 Nicholas C. Zakas大牛的Blog,
原文在这:http://www.nczonline.net/blog/2013/07/02/internet-explorer-11-dont-call-me-ie/
Javascript 相关文章推荐
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
May 11 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
May 16 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 Javascript
浅谈js常用内置方法和对象
Sep 24 Javascript
详解AngularJS验证、过滤器、指令
Jan 04 Javascript
Vue实现PopupWindow组件详解
Apr 28 Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
Sep 03 Javascript
javascript系统时间设置操作示例
Jun 17 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 Javascript
原生JS运动实现轮播图
Jan 02 Javascript
浏览器缩放检测的js代码
Sep 28 #Javascript
排序算法的javascript实现与讲解(99js手记)
Sep 28 #Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 #Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 #Javascript
js文件包含的几种方式介绍
Sep 28 #Javascript
javascript中bind函数的作用实例介绍
Sep 28 #Javascript
js和jquery如何获取图片真实的宽度和高度
Sep 28 #Javascript
You might like
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
php上传图片类及用法示例
2016/05/11 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
java必学必会之static关键字
2015/12/03 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
基于vue.js组件实现分页效果
2018/12/29 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
浅析Vue 中的 render 函数
2020/02/28 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
python3爬虫中异步协程的用法
2020/07/10 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
Python远程linux执行命令实现
2020/11/11 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
成品仓管员工作职责
2013/12/29 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技