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的Function详细
Nov 14 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
Mar 29 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
JS实现类似百叶窗下拉菜单效果
Dec 30 Javascript
JS 实现计算器详解及实例代码(一)
Jan 08 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
C#实现将一个字符转换为整数
Dec 12 Javascript
关于axios如何全局注册浅析
Jan 14 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
vue二级路由设置方法
Feb 09 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
jquery解析xml字符串简单示例
2014/04/11 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
js Array.slice的8种不同用法示例
2019/07/10 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
PHP面试题大全
2015/10/16 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
音乐教育感言
2014/03/05 职场文书
机关办公室岗位职责
2014/04/16 职场文书
合作意向书
2014/07/30 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫