多浏览器支持之 IE11【让程序支持IE11】
来源:互联网 发布:彩虹六号围攻优化 编辑:程序博客网 时间:2024/05/23 00:05
这也是首次微软真正移除了 Internet Explorer 的一些特性:更改了 user-agent 字符串,这使得很多判断浏览器是否 IE 的代码无法工作,包括有些 JavaScript 的 isIE() 的方法在 Internet Explorer 11 上执行会返回 false。不过好在 Internet Explorer 11 对 Web 标准的支持非常好,因此不再需要之前那些 IE 特定的行为。
在 Internet Explorer 11 中,user-agent 比之前的版本要短很多,而且去掉了最关键的 MSIE 的关键字:
Internet Explorer 11 的 user-agent:
1
Mozilla/5.0 (Windows NT 6.3;Trident/7.0; rv 11.0) like Gecko
Internet Explorer 10 的 user-agent (on Windows 7):
1
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
上述 user-agent 你还会注意到增加了 Gecko 的标识,而 Safari 是首个标注了 Gecko 的浏览器。
之前多数使用 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 的代码实际上还是可以工作。[3]
另外一个要废弃的是 attachEvent() 方法,该方法用于添加事件处理器,对应的 detachEvent() 用来移除事件处理器。这两个方法将在 Internet Explorer 11 中删除。移除这两个方法需要改用如下逻辑:
1
function
addEvent(element, type, handler) {
2
if
(element.attachEvent) {
3
element.attachEvent(
"on"
+ type, handler);
4
}
else
if
(element.addEventListener) {
5
element.addEventListener(type, handler,
false
);
6
}
7
}
当然,建议你优先使用标准的浏览器进行测试以确保不会因为 attachEvent() 的移除而影响代码执行。不过互联网上充斥着各种糟糕的监测代码,你只能确保自己的应用经过良好的标准测试。
被删除的特性还包括:
window.execScript()
– IE 版本的eval()
window.doScroll()
– IE 用来滚动窗口的方式script.onreadystatechange
– IE 方式的脚本加载完成的事件通知script.readyState
– IE 方式的测试脚本是否加载完成的状态document.selection
– IE 方式获取当前选择的文本document.createStyleSheet
– IE 方式创建样式单style.styleSheet
– IE 方式引用样式
所有这些被废弃的方法都有基于标准的替代方法。如果你使用的是标准的方法那恭喜你,可直接支持 Internet Explorer 11.
结论
看起来 Internet Explorer 11 应该是 Internet Explorer 家族最棒的版本。通过最终移除过去一些魔鬼般的错误,微软正在为大家准备一个真正标准的浏览器。
更新(2013-7-2): document.all
并没有真正被删除,但不推荐使用。
参考资料
Internet Explorer 11 preview guide for developers (MSDN)
Navigator Object – Client Identification (HTML5)
Obsolete – Behavior of document.all (HTML5)
Internet Explorer 11 界面截图
via nczonline/oschina翻译
- 多浏览器支持之 IE11【让程序支持IE11】
- 让IE6 ~IE11支持Bootstrap的解决方法
- IE11 支持WebDriver标准
- JS验证浏览器版本对IE11的支持
- 让IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- ie11不再支持attachEvent事件
- IE11支持Javascript程序哪些新型API接口
- bootstrap支持ie8 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- IE11
- ie11
- 解决动易SiteWeaver6.8后台编辑器支持IE9/IE10/IE11浏览器的方法
- ajax-webservice,IE11不再支持document.all来判断IE浏览器了
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的方法
- C# String.Format 数字格式化输出
- android中图片的一些操作小片段代码
- http状态码
- Windows Socket 最大连接数
- 黑马程序员_IO流入门讲解
- 多浏览器支持之 IE11【让程序支持IE11】
- Extjs学习总结---RowExpander 的异步调用
- HDU 4666 Hyperspace
- HQL具体用法
- Extjs学习总结---RowExpander 的异步调用
- .NET Remoting
- IAR MCS-51 v7.51A 软件注册机下载
- 类对象创建时占用内存
- 学Android开发啦啦啦啦啦啦啦啦啦