现在网络上的浏览器,操作系统就象中国的方言一样,那个叫多啊!这给我们这些开发人员
带来了巨大的痛苦!虽然可能大家的喜好不同!用的系统也不同!有人喜欢用ie,有人喜欢用
firefox,还有人喜欢用腾讯tt,而我喜欢用maxthon.虽然名字可能有很多种,但是内核还是只有
那么的几种!ie内核,netscape内核!怎么样用js来判断各种浏览器的类型呢!
在不同的浏览器中对js的支持程度,语法要求都不大一样!下面的代码为判断代码
<script language="JavaScript">
<!--
function getOs()
{
var OsObject = "";
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE";
}
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
return "Firefox";
}
if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
return "Safari";
}
if(isCamino=navigator.userAgent.indexOf("Camino")>0){
return "Camino";
}
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
return "Gecko";
}
}
alert("您的浏览器类型为:"+getOs());
-->
</script>
<script language="javascript">
if(window.ActiveXObject)
alert("is IE")
else
alert("not's IE")
</script>
http://www.iteye.com/wiki/topic/150534
Posted on 2008-09-06 23:14
李战
阅读(38531)
评论(35)
编辑
收藏
所属分类:
前端开发
你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器。
几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器。由于Chrome出生名门,尽管他还是个小家伙,没有人敢小看他。以后,咱们常说浏览器的“四大才子”就得改称为“五朵金花”了。
在网站前端开发中,浏览器兼容性问题本已让我们手忙脚乱,Chrome的出世不知道又要给我们添多少乱子。浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本。
JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本。JavaScript判断浏览器类型一
般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一种是通过分析浏览器的userAgent属性来判断的。在许多情况下,值判断出浏览器类型之
后,还需判断浏览器版本才能处理兼容性问题,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道。
我们先来分析一下各种浏览器的特征及其userAgent。
IE
只有IE支持创建ActiveX控件,因此她有一个其他浏览器没有的东西,就是ActiveXObject函数。只要判断window对象存在
ActiveXObject函数,就可以明确判断出当前浏览器是IE。而IE各个版本典型的userAgent如下:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
其中,版本号是MSIE之后的数字。
Firefox
Firefox中的DOM元素都有一个getBoxObjectFor函数,用来获取该DOM元素的位置和大小(IE对应的中是
getBoundingClientRect函数)。这是Firefox独有的,判断它即可知道是当前浏览器是Firefox。Firefox几个版本的
userAgent大致如下:
Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12
其中,版本号是Firefox之后的数字。
Opera
Opera提供了专门的浏览器标志,就是window.opera属性。Opera典型的userAgent如下:
Opera/9.27 (Windows NT 5.2; U; zh-cn)
Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0
其中,版本号是靠近Opera的数字。
Safari
Safari浏览器中有一个其他浏览器没有的openDatabase函数,可做为判断Safari的标志。Safari典型的userAgent如下:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
其版本号是Version之后的数字。
Chrome
Chrome有一个MessageEvent函数,但Firefox也有。不过,好在Chrome并没有Firefox的getBoxObjectFor
函数,根据这个条件还是可以准确判断出Chrome浏览器的。目前,Chrome的userAgent是:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
其中,版本号在Chrome只后的数字。
有趣的是,Chrome的userAgent还包含了Safari的特征,也许这就是Chrome可以运行所有Apple浏览器应用的基础吧。
只要了解了以上信息,我们就可以根基这些特征来判断浏览器类型及其版本了。我们会将判断的结果保存在Sys名字空间中,成为前端框架的基本标志信息,供今
后的程序来读取。如果判断出谋种浏览器,Sys名字空间将有一个该浏览器名称的属性,其值为该浏览器的版本号。例如,如果判断出IE
7.0,则Sys.ie的值为7.0;如果判断出Firefox 3.0,则Sys.firefox的值为3.0。下面是判断浏览器的代码:
<
script
type
="text/javascript"
>
var
Sys
=
{};
var
ua
=
navigator.userAgent.toLowerCase();
if
(window.ActiveXObject)
Sys.ie
=
ua.match(
/
msie ([\d.]+)
/
)[
1
]
else
if
(document.getBoxObjectFor)
Sys.firefox
=
ua.match(
/
firefox\
/
([\d.]
+
)
/
)[1]
else
if
(window.MessageEvent
&&
!
document.getBoxObjectFor)
Sys.chrome
=
ua.match(
/
chrome\
/
([\d.]
+
)
/
)[1]
else
if
(window.opera)
Sys.opera
=
ua.match(
/
opera.([\d.]+)
/
)[
1
]
else
if
(window.openDatabase)
Sys.safari
=
ua.match(
/
version\
/
([\d.]
+
)
/
)[1];
//
以下进行测试
if
(Sys.ie) document.write(
'
IE:
'
+
Sys.ie);
if
(Sys.firefox) document.write(
'
Firefox:
'
+
Sys.firefox);
if
(Sys.chrome) document.write(
'
Chrome:
'
+
Sys.chrome);
if
(Sys.opera) document.write(
'
Opera:
'
+
Sys.opera);
if
(Sys.safari) document.write(
'
Safari:
'
+
Sys.safari);
</
script
>
我们把对IE的判断放在第一,因为IE的用户最多,其次是判断Firefox。按使用者多少的顺序来判断浏览器类型,可以提高判断效率,少做无用功。之所
以将Chrome放在第三判断,是因为我们预测Chrome很快会成为市场占有率第三的浏览器。其中,在分析浏览器版本时,用到了正则表达式来析取其中的
版本信息。
如果你的JavaScript玩得很高,你还可以将前面的判断代码写成这样:
<
script
type
="text/javascript"
>
var
Sys
=
{};
var
ua
=
navigator.userAgent.toLowerCase();
window.ActiveXObject
?
Sys.ie
=
ua.match(
/
msie ([\d.]+)
/
)[
1
] :
document.getBoxObjectFor
?
Sys.firefox
=
ua.match(
/
firefox\
/
([\d.]
+
)
/
)[1] :
window.MessageEvent
&&
!
document.getBoxObjectFor
?
Sys.chrome
=
ua.match(
/
chrome\
/
([\d.]
+
)
/
)[1] :
window.opera
?
Sys.opera
=
ua.match(
/
opera.([\d.]+)
/
)[
1
] :
window.openDatabase
?
Sys.safari
=
ua.match(
/
version\
/
([\d.]
+
)
/
)[1] : 0;
//
以下进行测试
if
(Sys.ie) document.write(
'
IE:
'
+
Sys.ie);
if
(Sys.firefox) document.write(
'
Firefox:
'
+
Sys.firefox);
if
(Sys.chrome) document.write(
'
Chrome:
'
+
Sys.chrome);
if
(Sys.opera) document.write(
'
Opera:
'
+
Sys.opera);
if
(Sys.safari) document.write(
'
Safari:
'
+
Sys.safari);
</
script
>
这样可以使JavaScript代码更精简些。当然,可读性稍差一些,就看你是重视效率还是重视可维护性了。
使用不同特征来判断浏览器的方法,虽然在速度上比用正则表达式分析userAgent要来的快,不过这些特征可能会随浏览器版本而变化。比如,一种浏览器
本来独有的特性取得了市场上的成功,其他浏览器也就可能跟着加入该特性,从而使该浏览器的独有特征消失,导致我们的判断失败。因此,相对比较保险的做法是
通过解析userAgent中的特征来判断浏览器类型。何况,反正判断版本信息也需要解析浏览器的userAgent的。
通过分析各类浏览器的userAgent信息,不难得出分辨各类浏览器及其版本的正则表达式。而且,对浏览器类型的判断和版本的判断完全可以合为一体地进行。于是,我们可以写出下面的代码:
<
script
type
="text/javascript"
>
var
Sys
=
{};
var
ua
=
navigator.userAgent.toLowerCase();
var
s;
(s
=
ua.match(
/
msie ([\d.]+)
/
))
?
Sys.ie
=
s[
1
] :
(s
=
ua.match(
/
firefox\
/
([\d.]
+
)
/
)) ? Sys.firefox = s[1] :
(s
=
ua.match(
/
chrome\
/
([\d.]
+
)
/
)) ? Sys.chrome = s[1] :
(s
=
ua.match(
/
opera.([\d.]+)
/
))
?
Sys.opera
=
s[
1
] :
(s
=
ua.match(
/
version\
/
([\d.]
+
).
*
safari
/
)) ? Sys.safari = s[1] : 0;
//
以下进行测试
if
(Sys.ie) document.write(
'
IE:
'
+
Sys.ie);
if
(Sys.firefox) document.write(
'
Firefox:
'
+
Sys.firefox);
if
(Sys.chrome) document.write(
'
Chrome:
'
+
Sys.chrome);
if
(Sys.opera) document.write(
'
Opera:
'
+
Sys.opera);
if
(Sys.safari) document.write(
'
Safari:
'
+
Sys.safari);
</
script
>
其中,采用了“... ? ... : ...”这样的判断表达式来精简代码。判断条件是一条赋值语句,既完成正则表达式的匹配及结果复制,又直接作为条件判断。而随后的版本信息只需从前面的匹配结果中提取即可,这是非常高效的代码。
以上的代码都是为了打造前端框架所做的预研,并在五大浏览器上测试通过。今后,判断某种浏览器只需用if(Sys.ie)或
if(Sys.firefox)等形式,而判断浏览器版本只需用if(Sys.ie == '8.0')或if(Sys.firefox ==
'3.0')等形式,表达起来还是非常优雅的。
前端框架项目已经启动,一切就看过程和结果了...
原创:李战(leadzen) 阿里软件 2008-9-6 杭州
原文:http://www.cnblogs.com/leadzen/archive/2008/09/06/1285764.html
分享到:
相关推荐
js判断浏览器类型,判断5种主流浏览器。 IE Firefox Chrome Opera Safari
Firefox 浏览器可以通过判断 DOM 元素中是否存在 getBoxObjectFor 函数来确定,而 Firefox 的 userAgent 则可以通过字符串中包含“Gecko”和“Firefox”来判断,版本号则可以通过字符串中包含的数字来判断。...
有人喜欢用ie, firefox,还有人喜欢用腾讯tt,maxthon等等。虽然名字可能有很多种,但是内核我们知道下就没问题了。如IE内核的:IE,maxthon,tt都是。当然还有netscape内核!看大家怎么去判断! 由于在开发时碰上这个...
接着,我们来看Firefox、Chrome、Safari和IE这些浏览器。Firefox是由Mozilla开发的开源浏览器,以其对Web标准的严格支持和扩展功能的灵活性而闻名。Chrome是Google的产品,以其速度和稳定性受到用户喜爱,其内核基于...
### 知识点详解:判断火狐(Firefox)或IE浏览器 在Web开发领域,浏览器兼容性一直是开发者面临的重要问题之一。不同的浏览器对Web标准的支持程度不同,这可能导致同样的网页在不同浏览器中的显示效果存在差异。为了...
JavaScript是一种广泛应用于网页和网络应用的编程语言,它在客户端运行,为用户...通过阅读压缩包中的"JavaScript调试(Firefox).rar"和"JavaScript调试(IE).rar"文档,你可以更深入地学习这两个浏览器的具体调试技巧。
在上面的 DEMO 中,我们使用 `navigator.userAgent` 属性来判断浏览器类型,并弹出一个提示框显示浏览器类型。 JavaScript 中判断浏览器类型和版本是一个非常重要的知识点,它可以帮助我们在开发 web 应用程序时,...
"JS导入导出Excel 兼容IE、Firefox、Chrome等浏览器"这一技术主题,聚焦于如何使用JavaScript(JS)在各种浏览器环境下处理Excel文件,包括古老的Internet Explorer(IE)、Firefox以及Chrome。下面我们将深入探讨这...
页面放大缩小代码,兼容所有浏览器,代码简单,易学易用。
- **跨浏览器兼容性测试**:开发人员可以使用Firefox IE Tab实时检查网页在IE中的表现,找出可能出现的布局问题、JavaScript不兼容或者其他兼容性问题。 - **开发者工具**:虽然IE Tab使用的是IE的渲染引擎,但...
总的来说,这个知识点涉及了跨浏览器兼容性,尤其是Firefox如何通过扩展和特定的安装程序来支持原本为IE设计的OCX插件。对于开发人员来说,了解这种技术可以帮助他们在维护旧项目或兼容遗留系统的场景下,确保用户能...
提供的压缩包文件`JS获得鼠标位置(兼容多浏览器ie,firefox).htm`可能包含了这个功能的示例代码,可以打开查看具体的实现。在实际应用中,确保对各种浏览器进行充分测试,以确保兼容性和准确性。
"js 脚本调试工具-支持ie firefox等多种浏览器" 提供了一个强大的解决方案,让开发者能够在多种浏览器环境下高效地进行JS代码的调试工作。这里我们将深入探讨JavaScript调试工具的重要性、如何在IE和Firefox中进行...
IE 和 Firefox 处理自定义属性的方式不同,IE 可以使用获取常规属性的方法来获取自定义属性,也可以使用 `getAttribute()` 获取自定义属性,而 Firefox 只能使用 `getAttribute()` 获取自定义属性。 12. eval() ...
"JS日期选择器(兼容IE,FireFox,Oprea,chrome等主流浏览器)"是一个专门为JavaScript环境设计的,旨在解决跨浏览器兼容性问题的日期选择工具。这个组件的目标是确保在不同浏览器如Internet Explorer(IE)、Firefox、...
特别是在使用JavaScript编程语言时,IE和Firefox两个浏览器在很多方面的实现都存在差异。本文将详细介绍这些差异并提供相应的解决方法。 1. 关于innerText属性的支持: Firefox浏览器不支持innerText属性,而支持...