- 8.1 navigator对象
- 8.2 检测浏览器的方式
主要有两种方式来检测浏览器:1.对象/特征检测法 2.user-agent字符串检测法
-
8.2.1对象/特征检测法
if(document.getElementById) { //the method exists, so user it here } else { //do something else }
- 8.2.2 user-agent字符串检测法
常见的浏览器user-agent字符串:
浏览器 | user-agent字符串 |
Internet Explorer6.0(Windows XP) | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) |
Mozilla 1.5(Windows XP) |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5)Gecko/20031007 |
Firefox 0.92(Window XP) | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7)Gecko/20040707 Firefox/0.8 |
Opera 7.54(Windows XP) | Opera/7.54(Windows NT 5.1; U) |
Safari 1.25(MacOS X) |
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) Apple-Webkit/124 (KHTML,like Gecko) Safari/125.1 |
- 8.3 user-agent 字符串简史
- 8.3.1 Netscape Navigator 3.0 与 IE3.0
Netscape Navigator 3.0 的user-agent的字符串格式非常简单:如下:
Mozilla/Appversion (Platform; Security [; Os-or CPU-Description])
例如:运行于Windows 95上的Netscape Navigator 3.0 user-agent如下:
Mozilla/3.0(Win95; I)
注:I表示安全较低 N表示没有安全 U表示128位加密安全性(在美国大部分现在的浏览器都有128位安全性)
微软引入IE3.0,并提供了一个与Netscape Navigator 完全兼容的user-agent字符串.这样任何检查它(当时针对Netscape进行检查是一种标准)的服务器就会允许IE浏览页面.
格式:Mozilla/2.0 (compatible; MSIE [IEVersion];[OS]);
例如运行于Windows 95上的IE 3.02有如下user-agent字符串:
Mozilla/2.0 (compatible; MSIE 3.02;Windows 95);
本来开发人员只希望用一个酸法就能检测出3.0的浏览器,例如:
if(parseFloat(navigator.appVersion)>=3.0){
//do 3.0-level stuff here
}
现在酸法变为:
if(navigator.userAgent.indexOf("MSIE") > -1){
//IE,now check the version
if(navigator.userAgent.indexOf("MSIE 3.") > -1){
//do ie 3.0 brower stuff here
}
}else if(parseFloat(navigator.appVersion) >= 3){
//do other 3.0 brower stuff here
}
因为Netscape和微软用了不同的字符串来表示同一个操作系统,所以对操作系统必须进行两次检验.例如:
var isWin95 = navigator.userAgent.indexOf("Wind95") > -1 || navigator.userAgent.indexOf("Windows 95") > -1;
- 8.3.2 Netscape Communicator 4.0 与 IE4.0
Netscape Communicator 4.0
检测浏览器和版本以及操作系统方法和Netscape Navigator 3.0检测方法一样
IE4.0发布,这次将Mozilla的版本改成4.0了
Mizilla/4.0 (compatible; MSIE [IEVersion]; [OS])
例如:运行在Windows 98上的IE4.0 返回如下:
Mozilla/4.0(compatible; MSIE 4.0; Windows 98)
所以确定浏览器是否为4.0:
if(parseFloat(navigator.appVersion) > = 4.0){
//do 4.0-level stuff here
}
但是微软为MacOS发布的IE4.5很让人困惑,版本如下:
Mozilla/4.0(copatible; MSIE 4.5;Mac_PPC)
- 8.3.3 IE5.0及更高版本
user-agent还存在同样混乱的问题:
如:在Windows NT 4.0上运行的IE5.0返回的user-agent字符串:
Mozilla/4.0 (compatible; MSIE 5.0; Window NT)
5.5,6.0同样存在,如6.0
Mozilla/4.0 (compatible; MSIE 6.0; Windwos NT)
- 8.3.4 Mozilla
作为Netscape 6 (Mozilla)开发的一部分,开发人员起草了一份简短的文档作为user-agent字符串的标准.
Mozilla/MozillaVersion (Platform ; Security ; OS-or-CPU ; Localization infomation? [; PrereleaseVersion ]* [; Optional Other Comments] ) Gecko/GeckoVersion
[ApplicationProduct/ApplicationProductVersion]
字符串
是否必须
描述
MozillaVersion
是
Mozilla 的版本
Platform
是
使用操作系统的类型.可能的值:Windows\Macintosh\X11(Unix上的)
Security
是
浏览器的安全性.可能的值:N(没有安全性),u( 高度安全性),I(弱安全性)
OS-or-CPU
是
浏览器运行的操作系统或者是运行浏览器的计算机的处理器类型.如果Platform是Windows,那么这是Windows的版本(如WinNT或Win 95 等等).如果platform是Macintosh,那么这是CPU的类型(68Khuozhe PPC代表PowerPC).如果Platform是X11,那么这是Unix操作系统的名称从Unix命令uname-sm中获得
Localization infomation
是
浏览器语言.典型的是美国使用的en-US
PrereleaseVersion
否
用于这个浏览器的开放源代码的Mozilla代码的基础版本.注意,这个一直未被使用,直到Mozilla 0.9.2(Netscape 6.1)
Optional Other Comments
否
这是留给各自的Mozilla实现添加额外信息的空间
GeckoVersion
是
使用Gecko渲染引擎的版本.这是按照yyyymmdd格式的日期
ApplicationProduct
否
使用Mozilla代码的品派浏览器的名称.在Netscape 6 发行版中,这个是Netscape6:Netscape7改成Netscape
ApplicationProductVersion
否
使用Mozilla代码品牌浏览器的版本
运行于Windows XP 的Netscape 6.2.1:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4) Gecko/20011128 Netscape6/6.2.1
为什么MozillaVersion是5.0版呢?
Netscape 7.1是Netscape系列浏览器的最后一个版本.AOL更新了她与为软的许可证条款来使IE作为AOL软件内置的浏览器,然后就解散了Netscape小组.
现在Mozilla项目依然在发布自己的新版本的浏览器,同时还有一个更易用的版本,叫做Firefox
- 8.3.5 Opera
基本的格式如下:
Opera/AppVersion (OS; Security) [Language]
如在Windows XP计算机上使用Opera 7.54 的user-agent如下显示:
Opera/7.54 (Windows NT 5.1; U) [en]
注:在7.0版本之前,Opera使用解释过的Windows操作系统字符串的意思.例如 Windows NT 5.1使用Windows XP.为了和标准兼容,7.0使用官方报告的操作系统版本.
伪装:
Opera 伪装Mozilla 5.0如下:
Mozilla /5.0 (Windows NT 5.1; U) Opera 7.54
Opera 伪装Mozilla 4.78
Mozilla /4.78 (Windows NT 5.1; U) Opera 7.54
Opera 伪装Mozilla 3.0如下:
Mozilla /3.0 (Windows NT 5.1; U) Opera 7.54
Opera 伪装成IE6.0
Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1) Opera 7.54
- 8.3.6 Safari
2004,Apple推出该浏览器.
Unix的Konqueror浏览器的主要组建--->KHTML开源项目--->Apple Web Kit---->Safari(作为Aplle Web KiT的应用程序而被创建).目前作为所有MacOS X的默认WEB浏览器搭载在所
有的零售版中.
Safari的user-agent字符串的基本格式:
Mozilla/5.0 (Platform; Security; OS-or-CPU; Language) AppleWebKet/AppleWebKetVersion (KHTML,like Gecko) Safari/SafariVersion
如:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en)AppleWebKit/124 (KHTML, like Gecko) Safari/Safari125.1
- 8.3.7 结语
- 8.4 浏览器检测脚本
- 8.4.1 方法学
实际的做法是检测最小的版本而不是直接检测准确的版本.
如:
if( isMinIE5 ){
}
- 8.4.2 第一步
将user-agent字符串及版本信息保存到本地变量中.
var sUserAgent = navigator.userAgent;
var fAppVersion = parseFloat(navigator.appVersion);
两个版本字符串比较的最好办法是:
function compareVersions(sVersion1,sVersion2){
//转换成数组
var aVersion1 = sVersion1.split(".");
var aVersion2 = sVersion2.split(".");
//缺位补0
if(aVersion1.length > aVersion2.length){
for(int i = 0; i < aVersion1.length - aVersion2.length; i++){
aVersion2.push("0");
}
}
else if(aVersion1.length < aVersion2.length){
for(int i = 0; i < aVersion2.length - aVersion1.length; i++){
aVersion2.push("0");
}
}
//比较
for( int i = 0; i < aVersion1.length; i++){
if(aVersion1[i] > aVersion2[i]){
return 1;
}
if(aVersion1[i] > aVersion2[i]){
rturn -1;
}
}
return 0;
}
- 8.4.3 检测Opera
先考虑下Opera字符串格式
Opera/7.54 (Windows NT 5.1; U)
Mozilla/5.0 (Windows NT 5.1; U) Opera 7.54
Mozilla/4.78 (Windows NT 5.1;U ) Opera 7.54
Mozilla/3.0 (Windows NT 5.1;U ) Opera 7.54
Mozilla/4.0 (compatible;MSIE 6.0; Windows NT 5.1) Opera 7.54
考虑到所有串都包含Opera子串,而其它浏览器并未包含该子串,检测是否是Opera:
var isOpera = sUserVersion.indexof("Opera") > -1;
检测版本:
var isMinOpera4 = isMinOpera5 = inMinOpera6 =inMinOpera7 =inMinOpera7_5 =false;
if(inOpera){
var fOperaVersion;
if(navigator.appName == "Opera"){
fOperaVersion = fAppVersion;
}else{
var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
reOperaVersion.test(sUserAgent);
fOperaVersion = parseFloat(RegExp.["$1"]);
}
isMinOpera4 = fOperation >= 4;
isMinOpera4 = fOperation >= 5;
isMinOpera4 = fOperation >= 6;
isMinOpera4 = fOperation >= 7;
isMinOpera4 = fOperation >= 7.5;
}
- 8.4.4 检测Konqueror/Safari
基于Khtml的user-agent的字符串:
Mozilla/5.0 (compatible; Konqueror/2.2.2; SunOS)
Mozilla/5.0 (compatible; Konqueror/3; Linux; de,en_US,de_DE)
Mozilla/5.0 (compatible; Konqueror/3.1; Linux 2.4.20)
Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML,like Gecko)
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/51 (like Gecko) Safari/51
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; es-es) AppleWebKit/106.2 (KHTML, like Gecko) Safari/100.1
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; es-es) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1
前四个字符串出自Konqueror,最后三个出自Safari.
检测是否基于khtml:
var isKhtml = sUserAgent.indexOf("KHTML") > -1
|| sUserAgent.indexOf("Konqueror") > -1
|| sUserAgent.indexOf("AppleWebKit") > -1
判断是何种KHTML
if(isKHTML){
isSafari = sUserAgent.indexOf("AppleWevKit") > -1;
isKonq = sUserAgent.indexOf("Konqueror") > -1;
}
设置版本变量:
var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
判断版本:
if(isKHTML){
isSafari = sUserAgent.indexOf("AppleWevKit") > -1;
isKonq = sUserAgent.indexOf("Konqueror") > -1;
if(isSafari){
var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)");
reAppleWebKit.test(sUserAgent);
var fAppleWebKitVersion = parseFloat(RegExp.["$1"]);
isMinSafari1 = fAppWebKitVersion >= 85;
isMinSafari1_2 = fAppWebKitVersion >= 124;
}else if(isKonq){
var reKonq = new RegExp("Konqueror\\/(\\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 ;
}
}
-
8.4.4 检测IE
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)
考虑到Opera浏览器的伪装,检测IE需要下面:
var isIE = sUserAgent.indexOf("compatible") > -1
&& sUserAgent.indexOf("MSIE") > -1
&& !isOpera;
检测IE版本:
var isMinIE4 = isMinIE5 =isMinIE5_5 = isMinIE 6 = 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
}
-
8.4.4 检测Mozilla
Mozilla 的user-agent字符串:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4) Gecko/20011128 Netscape6/6.2.1
考虑到Opera伪装Mozilla:
Mozilla/5.0 (Windows NT 5.1; U) Opera 7.54
但是Mozilla包含字符Gecko 故检测方法:
var isMoz = sUserAgent.indexOf("Gecko") > -1;
然而基于KHTML的浏览器包含字符 "like Gecko",故
var isMoz = sUserAgent.indexOf("Gecko") > -1 && !isKHTML;
检测版本号:
var isMinMoz1 = isMinMoz1_4 = isMin1_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;
}
-
8.4.5 检测Netscape Communicator 4.0
检测浏览器类型:
var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML
&& (sUserAgent.indexOf("Mozilla") == 0)
&& (navigator.appName == "Netscape")
&& ((fAppVersion >= 4.0) && (fAppVersion <= 5.0));
检测版本:4.0 4.5(主要发布版本,代码做了大量的改进) 4.7(另一个主要发布版本) 4.8(最后版本)
var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 =false;
var (isNS4){
isMinNS4 = true;
isMinNS4_5 = fAppVersion >=4.5;
isMinNS4_7 = fAppVersion >=4.7;
isMinNS4_8 = fAppVersion >=4.8;
}
-
8.5 平台/操作系统检测脚本
-
8.5.1 方法学
-
8.5.2 方法学
var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
var isMac = (navigator.platform == "Mac68k") || (navigator.platform == "MacPPC")
|| (navigator.platform == "Macintosh");
-
8.5.3 检测Windows操作系统
var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = 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("Win NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") > -1;
isWinXP = sUserAgent.indexOf("Win NT 5.1") > -1 || sUserAgent.indexOf("Windows XP") > -1;
isWinNT4 = sUserAgent.indexOf(WinNT)
|| sUserAgent.indexOf("Windows NT") > -1
|| sUserAgent.indexOf("WinNT4.0") > -1
|| sUserAgent.indexOf("Windows NT 4.0") > -1
&& (!isWinME && !isWin2K && !isWinXP);
}
-
8.5.4 检测Macintosh操作系统
相关推荐
第8章 检测浏览器和操作系统 第9章 事件 第10章 高级DOM技术 第11章 表单和数据完整性 第12章 表格排序 第13章 拖放 第14章 错误处理 第15章 JavaScript中的XML 第16章 客户端与服务器端的通讯 第17章 Web服务 第18...
在计算机操作系统中,系统默认浏览器是指用户在打开链接或者点击某些需要通过网络浏览内容时,系统自动调用的浏览器程序。通常,操作系统会在首次安装浏览器或者其他应用时询问用户选择哪个浏览器作为默认。然而,...
5. **多平台兼容性**:在检测手机浏览器时,需要考虑不同操作系统(如iOS、Android、Windows Phone)以及多种浏览器(如Chrome、Firefox、Safari、Edge等)的User-Agent格式差异。 6. **异常处理**:由于User-Agent...
IE8,全称Internet Explorer 8,是由微软公司开发的一款Web浏览器,它是Internet Explorer系列中的第八个主要版本。这个版本在2009年3月19日正式发布,针对Windows XP、Vista以及Windows 7等操作系统提供服务。IE8在...
总的来说,IE8浏览器XP版本的提供,是为了满足那些依然使用Windows XP系统的用户的需求,尽管现代操作系统和浏览器已经发展得更加先进,但这款软件在当时是一个重要的升级,带来了诸多安全和功能上的改进。...
6. **跨平台支持**:大多数主流浏览器都支持Windows、MacOS、Linux等操作系统,部分还覆盖移动设备,如Android和iOS。 7. **用户界面**:浏览器的界面设计和可用性也影响着用户的使用体验,包括地址栏、书签管理、...
在Windows 8系统中安装猎豹浏览器的步骤相对简单,主要涉及到软件的兼容性设置,因为某些应用程序可能在新操作系统中遇到不兼容的问题。...同时,保持操作系统和浏览器的更新,能确保最佳的性能和安全性。
9. **兼容性**:考虑到Android设备的多样性,图片浏览器应确保在不同版本的Android系统和各种屏幕尺寸上都能正常工作。 10. **测试**:最后,进行全面的测试以确保所有功能的稳定性和可靠性,包括单元测试、集成...
7. 跨平台支持:Chrome支持Windows、Mac、Linux、Android和iOS等多个操作系统,最新版本会确保在各个平台上的体验一致性。 8. 网络标准支持:Chrome浏览器始终紧跟Web技术的发展,对HTML5、CSS3、JavaScript ES6等...
对于那些在硬件方面投入了大量的资金但又不愿意为操作系统支付高昂费用的用户来说,他们往往会选择所谓的“8元伪正版”操作系统。这类操作系统来源复杂多样,有的是从互联网上下载并通过光盘刻录而来,有的则是通过...
7. **跨平台支持**:Chrome支持Windows、Mac OS X、Linux和Android等多种操作系统。 8. **书签同步**:通过Google账户,用户可以在不同设备间同步浏览历史、书签、密码等个人信息。 9. **翻译功能**:内置Google...
Internet Explorer 10(简称IE10)是微软推出的第10代网络浏览器,发布于2012年,它在网页浏览速度、安全性能和用户体验方面都有显著提升。IE10是Windows 7及Windows Server 2008 R2操作系统中的一个重要更新,同时...
在IT领域,开发一个基于C#的图片浏览器是一项常见的任务,它涉及到图像处理、用户界面设计和文件操作等多个方面的知识。下面将详细讲解这个项目所涵盖的关键知识点。 首先,我们需要理解C#编程语言。C#是由微软开发...
6. **数据存储与加载**:图片数据可能来源于本地存储或网络,因此需要理解SQLite数据库或文件系统的操作,以及如何利用`AsyncTask`或`LiveData`进行异步加载,确保用户体验的流畅性。 7. **权限管理**:根据Android...
第8章 PCRE正则表达式 第9章 Nginx高可用的实现 第10章 10个QA 第2部分 Nginx服务器的功能 第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章 配置FLV服务器 第15章 Nginx...
这篇文档是关于计算机科学中浏览器/服务器系统的一次在线作业的参考答案,涵盖了多个IT领域的知识点,主要涉及服务器操作系统、服务器架构、服务器性能指标、存储技术如RAID等。下面将详细阐述这些知识点: 1. **以...
第8章 PCRE正则表达式 第9章 Nginx高可用的实现 第10章 10个QA 第2部分 Nginx服务器的功能 第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章 配置FLV服务器 第15章 Nginx...
第8章 PCRE正则表达式 第9章 Nginx高可用的实现 第10章 10个QA 第2部分 Nginx服务器的功能 第11章 限制流量 第12章 限制用户并发连接数 第13章 修改或隐藏Nginx的版本号 第14章 配置FLV服务器 第15章 Nginx...
操作系统是计算机系统中的核心软件,它管理着计算机的硬件资源,同时也为用户和应用程序提供服务。在本章的知识回顾中,我们将深入理解操作系统的基本概念、运行机制以及与CPU状态相关的概念。 首先,操作系统...
8. **文件系统访问**:图片浏览器需要访问设备上的图片文件,这涉及到Android的文件系统操作,如`Environment.getExternalStorageDirectory()`用于获取外部存储路径。 9. **图片选择器**:可能包含一个图片选择器...