在上个星期,微软随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/

Internet Explorer 11 浏览器介绍:别叫我IE的更多相关文章

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

    这篇文章主要介绍了Internet Explorer 11 浏览器介绍:别叫我IE,需要的朋友可以参考下

  2. 解决Android Device Monitor 的 File Explorer 中无法打开某些文件夹的问题

    这篇文章主要介绍了解决Android Device Monitor 的 File Explorer 中无法打开某些文件夹的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. php – Internet Explorer及其缺点(无Firebug类调试工具)

    我使用PHP/jQuery和JavaScript.我正在使用Firebug测试Firefox中的JavaScript代码.有没有什么类似的InternetExplorer?我正在努力让它在InternetExplorer7和InternetExplorer8中查找/工作.有什么工具可以解决这个问题吗?还是我需要遵循的标准?还有什么调试器可以推荐?

  4. Windows – Internet Explorer – SID S-1-5-5-0-348885

    在受保护模式下运行时,我注意到InternetExplorer已获得InternetSIDS-1-5-5-0-348885的许可.该SID映射到哪个用户?根据this,该SID用于登录会话,并且对于每个会话是唯一的.最后两个值不是静态的.

  5. windows – 禁用提示“单击继续以永久访问此文件夹”(例如,通过GPO)

    http://support.microsoft.com/en-us/kb/950934描述了当Administrators组的成员使用Explorer导航到Administrators组具有权限的文件夹时,将提示用户“单击继续以永久访问此文件夹”的方式.执行此操作时,资源管理器会更改文件夹的ACL,以将该特定用户完全控制权授予该文件夹.MS链接准确描述了需要它的设计约束.但是,它会破坏该文件夹的

  6. windows-7 – 如何在explorer.exe中创建新文件夹时诊断挂起

    pdbs,CTL文件和.TMF文件.我尝试使用WindowsSDK附带的explorer.pdb,但是没有用.我没有在“命名提供者”中看到explorer.exe.我不知道在哪里找到explorer.exe的ctl或.TMF文件.所以问题是:有没有办法从资源管理器中查看ETW跟踪消息?或者我只是不打扰并回到古老的技术,一个接一个地禁用每个探险家的扩展,希望其中的一个.(更喜欢前者,因为我喜欢深入了解事物!

  7. windows – 如何防止资源管理器在信息亭设置中作为shell启动?

    ),这将完成同样的事情.如果要重新启动计算机,还需要考虑整个设置如何工作.从那里,不要试图阻止explorer.exe运行,而是调查“阻止从我的电脑访问这些驱动器”GPO设置.在Technet或其他地方搜索有关在自助服务终端模式下运行Windows的建议也是值得的.

  8. windows-7 – 卡巴斯基处理错误Explorer.exe(回收站)

    我从Kaspersky获取涉及Explorer.exe的每日严重错误…有问题的文件几乎总是在回收站中,或桌面上的某些内容.以下是错误详细信息示例:谷歌搜索没有提供太多的洞察力,所以我想我会问这里是否有人遇到类似的情况.不确定它是否是一个bug,需要关注的东西,或者一个简单的修复等等.我通常只是清空回收站以进行临时修复,但是想要找到错误的根源.思考?

  9. windows-server-2003 – 是否有理由在Windows Server上升级Internet Explorer?

    我从未在Windows服务器上使用InternetExplorer.有什么理由我应该升级InternetExplorer?请记住,虽然您可能不直接使用IE,但IE渲染引擎或其他组件可能会被您运行的其他应用程序使用.我认为它应该保持最新.

  10. 窗口 – 允许在资源管理器样式的列表视图中选择从第一列开始

    在Windows7的“Windows资源管理器”列表视图(whatallegedlyisnotlistviewatall)的“详细信息”视图中,可以在第一个(名称)列中启动选择选框.你只需要从实际名字之外开始.“详细信息”视图中的默认样式列表视图控件也是如此.但是,如果将列表视图控件设置为Explorer风格(使用SetWindowTheme),那么应该如何模拟Windows资源管理器,这不再工作

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部