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 相关文章推荐
Javascript typeof 用法
Dec 28 Javascript
jquery调用asp.net 页面后台的实现代码
Apr 27 Javascript
JavaScript结合AJAX_stream实现流式显示
Jan 08 Javascript
jQuery给多个不同元素添加class样式的方法
Mar 26 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
Apr 13 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
React简单介绍
May 24 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
JavaScript的六种继承方式(推荐)
Jun 26 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
Aug 25 Javascript
express如何使用session与cookie的方法
Jan 30 Javascript
关于Vue Router的10条高级技巧总结
May 06 Vue.js
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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
JQuery与Ajax调用新浪API获取短网址的代码
2014/02/07 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
python黑魔法之编码转换
2016/01/25 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
django使用多个数据库的方法实例
2021/03/04 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
大学毕业生自荐书怎么写?
2014/01/06 职场文书
岗位聘任书范文
2014/03/29 职场文书
委托函范文
2015/01/29 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
地道战观后感2000字
2015/06/04 职场文书
2016年校长新年寄语
2015/08/17 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
nginx配置之并发频次限制
2022/04/18 Servers