由 IE8 User-Agent 更新想到的
来源:gracecode.com 时间:2009-01-12 18:33:00
IE 开发团队更改了 IE8 的 User-agent ,更改的部分信息如下:
IE8 on Windows Vista (Compatibility View)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)
IE8 on Windows Vista
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)
除了 IE8 因 Compatibility View 功能造成单浏览器“原生”多个 User-agent 外,还有个情况也变得非常的有趣,就是几乎每个浏览器都将自己渲染引擎的标识加入到了 User-agent 中(Gecko、Webkit、Trident)。
User-agent 信息常被用作检测浏览器类型和版本的最佳途径(YUI、jQuery),而上述的改动是否意味着以后类似的检测脚本会变得更加的复杂?回答这个问题之前,让我们看下 Mootools 如何检测浏览器信息
var Browser = {
Engine: {name: 'unknown', version: 0},
Features: {
xpath: !!(document.evaluate), // 是否支持 XPath
air: !!(window.runtime), // 是否支持 Air 扩展
query: !!(document.querySelector) // 是否支持 CSS 选择器
},
Engines: {
// 判断 Opera
presto: function() {
return (!window.opera) ?
false : ((arguments.callee.caller) ?
960 : ((document.getElementsByClassName) ? 950 : 925));
},
// 判断 IE,根据 ActiveX 和 特有的 XMLHttpRequest 对象
trident: function() {
return (!window.ActiveXObject) ?
false : ((window.XMLHttpRequest) ? 5 : 4);
},
// Webkit 核心的浏览器,如 Safari 和 Chrome
webkit: function() {
return (navigator.taintEnabled) ?
false : ((Browser.Features.xpath) ?
((Browser.Features.query) ? 525 : 420) : 419);
},
// Mozilla Gecko 核心浏览器,如 Firefox
gecko: function() {
return (document.getBoxObjectFor == undefined) ?
false : ((document.getElementsByClassName) ? 19 : 18);
}
}
};
Browser.detect = function() {
for (var engine in this.Engines){
var version = this.Engines[engine]();
// 如果具有特定的浏览器对象
if (version){
this.Engine = {name: engine, version: version};
this.Engine[engine] = this.Engine[engine + version] = true;
break;
}
}
return {name: engine, version: version};
};
Browser.detect();
上述代码让人感到耳目一新,它是根据浏览器功能而非 User-agent 判断浏览器类型。仔细考虑一下,User-agent 信息可以被伪造,同时浏览器厂商日后也会更改 User-agent 信息,所以此种情况下根据功能判断浏览器类型会可靠得多。
延伸下此策略,比如我们会编写这样的代码:
if (ie) { // ie only } else { // other browsers }
这样因浏览器差异而编写的“硬代码”,往往会造成维护两套实际相同功能的代码,并造成逻辑上的混乱。何不先抛开浏览器兼容的问题,然后再判断相应的对象是否被浏览器支持。
OK,有关编程思想的问题就不继续了…
-- Split --
PS,目前判断是否是 IE8 可这样编写(来自 舜子):
var isIE8 = !!window.XDomainRequest;
标签:ie8,User-Agent,浏览器,代码
0
投稿
猜你喜欢
新浪微博文字渐隐效果
2011-04-29 12:33:00
用CSS实现柱状图(Bar Graph)的方法(四)—table实现复杂柱状图
2008-05-28 12:55:00
javascript新闻图片轮换类
2009-01-09 12:57:00
ASP文件中的安全问题
2011-04-14 11:15:00
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011-06-06 10:28:00
MYSQL中取得最后一条记录
2010-03-09 16:08:00
如何修改被表单引用的ASP页面?
2010-06-10 18:32:00
JavaScript 各种动画渐变效果
2008-09-02 10:38:00
HTML5本地存储初探(二)
2010-03-07 15:47:00
[教程]用代码让你了解网页与键盘
2008-06-10 12:18:00
getElementsByAttribute
2009-10-27 12:13:00
Mysql数据库名和表名的大小写敏感性问题
2010-06-07 14:07:00
SQL Server 2005中数据库镜像的四个问题
2009-02-19 16:48:00
SQL Server各种日期计算方法
2008-09-11 21:47:00
sql server常用命令行操作(启动、停止、暂停)
2012-01-05 19:02:48
潜谈产品设计中的可用性和可访问性
2009-01-18 12:47:00
不同浏览器的兼容一些写法
2009-03-26 12:58:00
oracle sys_connect_by_path 函数 结果集连接
2009-07-12 18:48:00
Discuz!NT 论坛整合ASP程序论坛
2011-03-31 10:40:00
javascript 函数调用的对象和方法
2010-07-02 12:25:00