JavaScript 检测浏览器和操作系统的脚本


Posted in Javascript onDecember 26, 2008

Web编程中,识别用户的浏览器以及操作系统非常重要。因为它们对HTML和JavaScript的支持程度有所不同。
一般应用在系统登陆页面或者首页中。
具体应用如下:

<html> 
<head> 
<title>Login</title> 
<script type="text/javascript" src="detect.js"></script> 
<script type="text/javascript"> 
window.onload = function () { 
if ((isMinIE5_5 && isWin) || (isMinMoz1 && isUnix) 
|| (isMinSafari1 && isMac)) { 
document.getElementById("divLogin").style.visibility = "visible"; 
document.getElementById("divError").style.visibility = "hidden" 
} 
}; 
</script> 
</head> 
<body> 
<form method="post" action="DoLogin.jsp"> 
<div style="border: 2px dashed blue; background-color: #dedede; height: 300px; padding: 10px"> 
<div id="divError" style="position: absolute; left: 20px; top: 100px; "> 
This Web application requires one of the following: 
<ul> 
<li>Internet Explorer 5.5 or higher for Windows</li> 
<li>Mozilla 1.0 or higher for Unix</li> 
<li>Safari 1.0 or higher for Macintosh</li> 
</ul> 
<noscript> 
<p>This Web application also requires JavaScript (if you are using one of the above browsers, make sure that JavaScript is enabled).</p> 
</noscript> 
</div> 
<div id="divLogin" style="position: absolute; left: 20px; top: 100px; visibility: hidden"> 
<table border="0" width="100%" height="100%"><tr><td align="center"> 
<table border="0"> 
<tr> 
<td>Username:</td><td><input type="text" name="txtUsername" /></td> 
</tr> 
<tr> 
<td>Password:</td><td><input type="password" name="txtPassword" /></td> 
</tr> 
<tr> 
<td> </td><td><input type="Submit" value="Login" /></td> 
</tr> 
</table> 
</td></tr></table> 
</div> 
</div> 
</form> 
</body> 
</html>

detect.js
/************************************************************************* 
File Name: detect.js 
Create Date: 
Author: 
Description: detect browser and operating system 
***********************************************************************/ 
var sUserAgent = navigator.userAgent; 
var fAppVersion = parseFloat(navigator.appVersion); 
function compareVersions(sVersion1, sVersion2) { 
var aVersion1 = sVersion1.split("."); 
var aVersion2 = sVersion2.split("."); 
if (aVersion1.length > aVersion2.length) { 
for (var i=0; i < aVersion1.length - aVersion2.length; i++) { 
aVersion2.push("0"); 
} 
} else if (aVersion1.length < aVersion2.length) { 
for (var i=0; i < aVersion2.length - aVersion1.length; i++) { 
aVersion1.push("0"); 
} 
} 
for (var i=0; i < aVersion1.length; i++) { 
if (aVersion1[i] < aVersion2[i]) { 
return -1; 
} else if (aVersion1[i] > aVersion2[i]) { 
return 1; 
} 
} 
return 0; 
} 
var isOpera = sUserAgent.indexOf("Opera") > -1; 
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false; 
if (isOpera) { 
var fOperaVersion; 
if(navigator.appName == "Opera") { 
fOperaVersion = fAppVersion; 
} else { 
var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)"); 
reOperaVersion.test(sUserAgent); 
fOperaVersion = parseFloat(RegExp["$1"]); 
} 
isMinOpera4 = fOperaVersion >= 4; 
isMinOpera5 = fOperaVersion >= 5; 
isMinOpera6 = fOperaVersion >= 6; 
isMinOpera7 = fOperaVersion >= 7; 
isMinOpera7_5 = fOperaVersion >= 7.5; 
} 
var isKHTML = sUserAgent.indexOf("KHTML") > -1 
|| sUserAgent.indexOf("Konqueror") > -1 
|| sUserAgent.indexOf("AppleWebKit") > -1; 
var isMinSafari1 = isMinSafari1_2 = false; 
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false; 
if (isKHTML) { 
isSafari = sUserAgent.indexOf("AppleWebKit") > -1; 
isKonq = sUserAgent.indexOf("Konqueror") > -1; 
if (isSafari) { 
var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)"); 
reAppleWebKit.test(sUserAgent); 
var fAppleWebKitVersion = parseFloat(RegExp["$1"]); 
isMinSafari1 = fAppleWebKitVersion >= 85; 
isMinSafari1_2 = fAppleWebKitVersion >= 124; 
} else if (isKonq) { 
var reKonq = new RegExp("Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)"); 
reKonq.test(sUserAgent); 
isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") >= 0; 
isMinKonq3 = compareVersions(RegExp["$1"], "3.0") >= 0; 
isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") >= 0; 
isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") >= 0; 
} 
} 
var isIE = sUserAgent.indexOf("compatible") > -1 
&& sUserAgent.indexOf("MSIE") > -1 
&& !isOpera; 
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false; 
if (isIE) { 
var reIE = new RegExp("MSIE (\\d+\\.\\d+);"); 
reIE.test(sUserAgent); 
var fIEVersion = parseFloat(RegExp["$1"]); 
isMinIE4 = fIEVersion >= 4; 
isMinIE5 = fIEVersion >= 5; 
isMinIE5_5 = fIEVersion >= 5.5; 
isMinIE6 = fIEVersion >= 6.0; 
} 
var isMoz = sUserAgent.indexOf("Gecko") > -1 
&& !isKHTML; 
var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false; 
if (isMoz) { 
var reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)"); 
reMoz.test(sUserAgent); 
isMinMoz1 = compareVersions(RegExp["$1"], "1.0") >= 0; 
isMinMoz1_4 = compareVersions(RegExp["$1"], "1.4") >= 0; 
isMinMoz1_5 = compareVersions(RegExp["$1"], "1.5") >= 0; 
} 
var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML 
&& (sUserAgent.indexOf("Mozilla") == 0) 
&& (navigator.appName == "Netscape") 
&& (fAppVersion >= 4.0 && fAppVersion < 5.0); 
var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false; 
if (isNS4) { 
isMinNS4 = true; 
isMinNS4_5 = fAppVersion >= 4.5; 
isMinNS4_7 = fAppVersion >= 4.7; 
isMinNS4_8 = fAppVersion >= 4.8; 
} 
var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows"); 
var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") 
|| (navigator.platform == "Macintosh"); 
var isUnix = (navigator.platform == "X11") && !isWin && !isMac; 
var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false; 
var isMac68K = isMacPPC = false; 
var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false; 
if (isWin) { 
isWin95 = sUserAgent.indexOf("Win95") > -1 
|| sUserAgent.indexOf("Windows 95") > -1; 
isWin98 = sUserAgent.indexOf("Win98") > -1 
|| sUserAgent.indexOf("Windows 98") > -1; 
isWinME = sUserAgent.indexOf("Win 9x 4.90") > -1 
|| sUserAgent.indexOf("Windows ME") > -1; 
isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 
|| sUserAgent.indexOf("Windows 2000") > -1; 
isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 
|| sUserAgent.indexOf("Windows XP") > -1; 
isWinNT4 = sUserAgent.indexOf("WinNT") > -1 
|| sUserAgent.indexOf("Windows NT") > -1 
|| sUserAgent.indexOf("WinNT4.0") > -1 
|| sUserAgent.indexOf("Windows NT 4.0") > -1 
&& (!isWinME && !isWin2K && !isWinXP); 
} 
if (isMac) { 
isMac68K = sUserAgent.indexOf("Mac_68000") > -1 
|| sUserAgent.indexOf("68K") > -1; 
isMacPPC = sUserAgent.indexOf("Mac_PowerPC") > -1 
|| sUserAgent.indexOf("PPC") > -1; 
} 
if (isUnix) { 
isSunOS = sUserAgent.indexOf("SunOS") > -1; 
if (isSunOS) { 
var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)"); 
reSunOS.test(sUserAgent); 
isMinSunOS4 = compareVersions(RegExp["$1"], "4.0") >= 0; 
isMinSunOS5 = compareVersions(RegExp["$1"], "5.0") >= 0; 
isMinSunOS5_5 = compareVersions(RegExp["$1"], "5.5") >= 0; 
} 
}
Javascript 相关文章推荐
ajaxControlToolkit AutoCompleteExtender的用法
Oct 30 Javascript
jquery ui resizable bug解决方法
Oct 26 Javascript
JQuery中$之选择器用法介绍
Apr 05 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
Javascript中绑定click事件的四种方式介绍
Oct 26 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
vue中移动端调取本地的复制的文本方式
Jul 18 Javascript
three.js着色器材质的内置变量示例详解
Aug 16 Javascript
javascript 对表格的行和列都能加亮显示
Dec 26 #Javascript
JavaScript 仿关机效果的图片层
Dec 26 #Javascript
jquery 插件 任意位置浮动固定层
Dec 25 #Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 #Javascript
jquery 图片预加载 自动等比例缩放插件
Dec 25 #Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
Dec 25 #Javascript
ASP SQL防注入的方法
Dec 25 #Javascript
You might like
php db类库进行数据库操作
2009/03/19 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
JS可以控制样式的名称写法一览
2014/01/16 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
python如何绘制疫情图
2020/09/16 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
设置器与访问器的定义以及各自特点
2016/01/08 面试题
董事长助理工作职责范本
2014/07/01 职场文书
放飞理想演讲稿
2014/09/09 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
2015年超市工作总结
2015/04/09 职场文书
狂人日记读书笔记
2015/06/30 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android