- 浏览: 289809 次
- 性别:
- 来自: 龙城
最新评论
-
redey:
这垃圾东西,1.6以上JDK不支持
Jocky混淆JAVA代码(保护你的JAVA项目) -
u012907473:
水电费是否是否
js页面缓存的一个解决办法 -
jackson200:
讲解的很详细!
Jocky混淆JAVA代码(保护你的JAVA项目) -
jamesqq79:
下载解压缩后,不知是何文件格式,用PDF阅读器打不开。
Java程序员的推荐阅读书籍之十《Agile Java》 -
meimei727:
<!-- 给页面文件中的js和css引用增加版本号 -- ...
利用ant进行项目发布
说明:以下内容参考了一些网上资料以及同事间的一些讨论。
浏览器对于我们来说,可能是最熟悉的工具了。记得最早那会Netscape,到后来的Internet Explorer一统江湖,再到现在的FireFox大行其道,浏览器市场的争夺,可谓是硝烟弥漫。除了我们常见的IE, Firefox, Opera, Safari四大金刚以外,新近又出了一位Chrome,虽然新出,但是出于Google这个名门,Chrome所受到的关注绝不亚于先前的四大金刚,看来以后要改为5朵金花了,呵呵。除了这些熟知的浏览器以外,据说世界上还有近百种浏览器(汗!!套用一句话:世界上怎么有这么多人喜欢重复发明轮子呢?O(∩_∩)O哈哈~)。
在我们的产品开发过程中,经常要考虑浏览器兼容问题,以适应不同的用户人群,同时也减少因浏览器兼容问题所带来的服务量。一般来说,通过JavaScript判断浏览器类型,我们通常使用两种方法,一种是根据各种浏览器独有的属性来分辨,另一种是通过分析浏览器的user-Agent属性来判断的。在许多情况下,值判断出浏览器类型之后,还需判断浏览器版本才能处理兼容性问题,而判断浏览器的版本一般只能通过分析浏览器的User-Agent才能知道。现在比较流行的javascript框架,都有浏览器兼容的判断代码,像jquery、YUI就是使用User-Agent,而Mootools则是使用用各种浏览器独有的属性来分辨。
先来看看什么是User-Agent?User-Agent是HTTP请求中的用户标识,一般发送一个能够代表客户端类型的字符串,比如浏览器类型 操作系统等信息。User-Agent 的约定格式是:应用名,跟一个斜线,跟版本号,剩下的是自由的格式。
我们先来看一下五朵金花的User-Agent:
IE
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
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/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
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
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
其中,版本号在Chrome只后的数字。
一.基于User-Agent信息的实现
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);
二.根据浏览器特有属性判断
var Browser = { Engine: {name: 'unknown', version: 0}, Features: { xpath: !!(document.evaluate), // 是否支持 XPath air: !!(window.runtime), // 是否支持 Air 扩展 query: !!(document.querySelector) // 是否支持 CSS 选择器 }, Engines: { // 判断 Opera presto: function() { return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));}, // 判断 IE,根据 ActiveX 和 特有的 XMLHttpRequest 对象 trident: function() { return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4);}, // Webkit 核心的浏览器,如 Safari 和 Chrome webkit: function() { return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);}, // Mozilla Gecko 核心浏览器,如 Firefox gecko: function() { return (document.getBoxObjectFor == undefined) ? false : ((document.getElementsByClassName) ? 19 : 18);} } }; Browser.detect = function() { for (var engine in this.Engines){ var version = this.Engines[engine](); // 如果具有特定的浏览器对象 if (version){ this.Engine = {name: engine, version: version}; this.Engine[engine] = this.Engine[engine + version] = true; break; } } return {name: engine, version: version}; }; Browser.detect();
或者
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);
但是,这两种检测方法都有其局限性,User-Agent 是可以通过代码修改的,所以纯粹检测User-Agent可能会带来一定的风险,而且ie8的Compatibility View 功能造成单浏览器会“原生”多个 User-agent 。使用不同特征来判断浏览器的方法,
虽然在速度上比用正则表达式分析userAgent要来的快,不过这些特征可能会随浏览器版本而变化。比如,一种浏览器本来独有的特性取得了市场上的成功,其他浏览器也就可能跟着加入该特性,从而使该浏览器的独有特征消失,导致我们的判断失败。因此,
相对比较保险的做法是通过解析userAgent中的特征来判断浏览器类型。何况,反正判断版本信息也需要解析浏览器的userAgent的。所以,在我们的实际编程中,还得根据实际情况来决定使用哪种方法来判断浏览器类型和版本。
ppk on javascript中有关浏览器检测的看法和建议
1、Opera,iCab等非主流浏览器提供给用户自己修改识别字符串,以访问更多的网站。
2、Opera
在navigator.userAgent永远包含一个子字符串Opera,即使当它处于伪装模式时也一样。而且Opera是唯一支持window.opera属性的浏览器
3、Safari、iCab和Konqueror
在navigator.userAgent有它们自己的标识符,那他们也有可能不包含,为了伪装。
4、Gecko
Mozilla的识别字符串中通常包含Gecko,不过,Safari的默认字符串中也包含Gecko
5、MSIE
大部分浏览器都拿它来伪装,因此它的出现说明不了任何问题。
三.ppk中有关浏览器检测的代码
var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;i<data.length;i++) { var dataString = data.string; var dataProp = data.prop; this.versionSearchString = data.versionSearch || data.identity; if (dataString) { if (dataString.indexOf(data.subString) != -1) return data.identity; } else if (dataProp) return data.identity; } }, searchVersion: function (dataString) { var index = dataString.indexOf(this.versionSearchString); if (index == -1) return; return parseFloat(dataString.substring(index+this.versionSearchString.length+1)); }, dataBrowser: [ { string: navigator.userAgent, subString: "Chrome", identity: "Chrome" }, { string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb" }, { string: navigator.vendor, subString: "Apple", identity: "Safari", versionSearch: "Version" }, { prop: window.opera, identity: "Opera" }, { string: navigator.vendor, subString: "iCab", identity: "iCab" }, { string: navigator.vendor, subString: "KDE", identity: "Konqueror" }, { string: navigator.userAgent, subString: "Firefox", identity: "Firefox" }, { string: navigator.vendor, subString: "Camino", identity: "Camino" }, { // for newer Netscapes (6+) string: navigator.userAgent, subString: "Netscape", identity: "Netscape" }, { string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE" }, { string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv" }, { // for older Netscapes (4-) string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" } ], dataOS : [ { string: navigator.platform, subString: "Win", identity: "Windows" }, { string: navigator.platform, subString: "Mac", identity: "Mac" }, { string: navigator.platform, subString: "Linux", identity: "Linux" } ] }; BrowserDetect.init(); document.write('你正在使用的是:' + BrowserDetect.browser + ' ' + BrowserDetect.version + ' on ' + BrowserDetect.OS + '!');
发表评论
-
autochk program not found 蓝屏重启问题解决
2012-04-17 10:54 13841起因: 因为硬盘空间不够,所以把原来的双系统中的ubu ... -
IOS开发一些资源
2012-02-06 16:07 1365从别的地方看到的,多谢作者,现贴在这里备忘。 在线教程 ... -
发现一个好东东,可以让浏览器跟本地桌面交互,哈哈
2011-09-08 17:35 1248http://gears.google.com/ -
nodejs开发运行环境搭建
2011-08-18 15:03 4403一. geddy 开发运行环境搭建 geddy是基 ... -
javascript来势凶猛
2011-08-15 17:22 1215引子 java编程弄了7,8个年头了,也 ... -
Oracle驱动包装
2011-07-06 17:06 2036见附件。 -
javaeye域名变了
2011-04-01 10:31 1280javaeye域名变了,才发现,哈哈,mark下。 -
拥抱敏捷
2011-01-15 17:27 1100前言 有关项目管理和软件开发方 ... -
重温设计模式
2011-01-13 10:27 1165策略模式: 定义了算 ... -
jsoup,html解析的利器
2011-01-07 09:21 1208http://jsoup.org/download -
关于html表格复制到excel
2010-09-09 14:04 5875刚才一个朋友问我这个事情,我拍脑袋想了一下,给他答复不可能,因 ... -
Java 路径 System.getProperty("key")的参数key
2010-09-02 14:37 1289java.version ... -
这种需求,大家看看有没有比较好的解决方案
2010-06-25 09:47 2343在我们的应用中,碰到了如图所示的一种网络结构。 重新描 ... -
java中singleton的几种实现方式
2010-06-24 15:08 1476传统的最简单的方式 这种模式有一个缺点就是不能实现延 ... -
oracle分页查询数据重复问题的解决
2010-06-24 11:00 3429在oracle分页查询中,我们采用类似以下所示的公认的比较高效 ... -
ubuntu10.04中安装使用IE6
2010-06-21 09:55 2598在用ubuntu910的时候,已经装了一遍IE了,但是升级到1 ... -
今天发现的两个有价值的东东
2010-06-17 15:45 1520其一,iRedMail,开源邮件解决方案。 其 ... -
ubuntu 10.04 中安装mysql5.1.4
2010-06-17 15:28 1837自从升级到10.04以后,mysql就不正常,卸载装了n次,均 ... -
升级到ubuntu 10.04,wine中的ie不正常了
2010-06-11 10:01 1708ubuntu上也折腾了半年了,日常工作生活基本没有太多的障碍了 ... -
升级到ubuntu10.04,mysql不能用了
2010-06-11 09:53 18789.10版本用了半年了,10.04发布了,看了10.04的宣传 ...
相关推荐
本文将详细介绍如何利用JavaScript来判断浏览器的类型及其版本,以便于更好地解决不同浏览器之间的兼容性挑战。 首先,我们可以根据浏览器特有的属性或方法来识别浏览器类型。例如: 1. Internet Explorer(IE):...
本文将介绍如何使用Javascript来检测浏览器的类型以及版本号,包括猎豹浏览器、搜狗浏览器、傲游浏览器、360极速浏览器、360安全浏览器、QQ浏览器、百度...JavaScript判断浏览器类型及版本</title> [removed]
几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器。由于Chrome出生名门,尽管他还是个小家伙,没有人敢小看他。...JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属
1. JS 通过分析 userAgent 属性来推断浏览器的类型及版本 2. JavaScript 推断当前浏览器类型,推断 IE 浏览器方法 3. JavaScript 检测浏览器类型和版本的代码 4. js/jquery 推断浏览器类型的方法 获取浏览器类型和...
今天我们将探讨一种新的方法,特别是在jQuery 1.9及更高版本中,如何判断浏览器类型和版本。 首先,我们需要明白为什么`$.browser`被移除。jQuery团队认为这样的检测可能导致过度依赖特定浏览器的行为,而忽视了对...
通过JavaScript可以实现对浏览器类型及版本的判断。 #### 1.2 实现原理 此段代码通过读取`navigator.userAgent`属性来获取浏览器信息,并通过正则表达式匹配来判断浏览器类型和版本。具体来说: - **`navigator....
下面我们将详细介绍 JavaScript 中判断浏览器类型和版本的方法。 判断浏览器类型 首先,我们可以使用 `document.all` 属性来判断浏览器是否为 IE。如果 `document.all` 的值为 1,那么浏览器就是 IE,否则不是。...
简单的一二十代码, 就可以判断出当前所有浏览器的类型, 支持的浏览器也有很多,感谢支持
在JavaScript中,我们经常需要检测用户的浏览器类型及版本,以便为不同的浏览器提供兼容性的解决方案或者优化用户体验。这可以通过检查navigator对象的各种属性来实现。navigator对象是浏览器提供的一个全局对象,...
这段代码通过检查`userAgent`字符串中是否存在特定的浏览器名称来判断浏览器类型。如果发现多个浏览器标识,它将返回最先匹配到的浏览器类型。 然而,这种方法并不完全可靠,因为用户可以自定义`userAgent`字符串,...
在网页开发中,判断浏览器类型是一项重要的任务,因为不同的浏览器可能会有不同的兼容性问题。了解用户正在使用的浏览器可以帮助开发者针对性地优化网站,确保在各种环境下都能提供良好的用户体验。本文将详细介绍...
通过原生JavaScript判断浏览器类型及版本的关键代码如下: ```javascript var isIE = document.all ? 'IE' : 'others'; // 方法1 var bro = navigator.userAgent; var isIE2 = bro.indexOf("MSIE") > 0 ? 'IE' : '...
本文将深入探讨如何使用JavaScript来判断访问者所使用的浏览器及其版本,基于给定的代码片段进行详细解析。 ### 一、理解UserAgent 在前端开发中,`navigator.userAgent`是一个非常重要的属性,它返回一个包含...
在IT领域,特别是前端开发中,能够准确地识别和判断用户使用的浏览器类型及版本是一项重要的技能。这不仅能帮助开发者针对性地优化网站性能,还能确保在不同浏览器上提供一致的用户体验。下面,我们将深入探讨如何...
"jQuery判断浏览器版本及鉴别浏览器类型代码.rar"这个压缩包包含了用于检测浏览器类型和版本的jQuery代码,帮助开发者创建更加兼容和用户体验良好的网站。 首先,让我们了解一下如何通过jQuery来获取浏览器的信息:...