日期:2014-05-16  浏览次数:20400 次

js判断浏览器(支持区分ie、firefox、opera、chrome、safari)
看到jquery的浏览器判断,并没完全符合我的要求,以下是jquery的正则表达式:
	// Useragent RegExp
	rwebkit = /(webkit)[ \/]([\w.]+)/,
	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
	rmsie = /(msie) ([\w.]+)/,
	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,



以下针对自己的想法做了新的改进,支持区分ie、firefox、opera、chrome、safari,
另外版本号的取值也与jquery不同,jquery取得版本号可能是内核的版本号吧,以后再考虑改进改进:
	// browser check-----start
	var userAgent = navigator.userAgent, // userAgent
	rMsie = /.*(msie) ([\w.]+).*/, // ie
	rFirefox = /.*(firefox)\/([\w.]+).*/, // firefox
	rOpera = /(opera).+version\/([\w.]+)/, // opera
	rChrome = /.*(chrome)\/([\w.]+).*/, // chrome
	rSafari = /.*version\/([\w.]+).*(safari).*/;// safari
	jMeteor.browser = {};
	var ua = userAgent.toLowerCase();
	function uaMatch(ua) {
		var match = rMsie.exec(ua);
		if (match != null) {
			return { browser : match[1] || "", version : match[2] || "0" };
		}
		var match = rFirefox.exec(ua);
		if (match != null) {
			return { browser : match[1] || "", version : match[2] || "0" };
		}
		var match = rOpera.exec(ua);
		if (match != null) {
			return { browser : match[1] || "", version : match[2] || "0" };
		}
		var match = rChrome.exec(ua);
		if (match != null) {
			return { browser : match[1] || "", version : match[2] || "0" };
		}
		var match = rSafari.exec(ua);
		if (match != null) {
			return { browser : match[2] || "", version : match[1] || "0" };
		}
		if (match != null) {
			return { browser : "", version : "0" };
		}
	}
	var browserMatch = uaMatch(userAgent.toLowerCase());
	if (browserMatch.browser) {
		jMeteor.browser[browserMatch.browser] = true;
		jMeteor.browserName = browserMatch.browser;
		jMeteor.browser.version = browserMatch.version;
		jMeteor.browser.language = (navigator.language ? navigator.language
				: navigator.userLanguage || "");
	}
	// browser check-----end




使用方法:
jMeteor.browser.msie //判断是否为ie,返回true则代表是
jMeteor.browserName //浏览器名称
jMeteor.browser.version //浏览器版本
jMeteor.browser.language //语言


1 楼 y11111494 2011-04-18  
?????????????
2 楼 ONEBOYS 2011-04-18  
我一般用到两个判断
判断是否为ie
判断是否为ie6
3 楼 50980487 2011-04-22  
学习了,谢谢分享!!!
4 楼 yszdl196 2011-04-22  
jMeteor是在哪定义的啊?
5 楼 spirit23 2011-04-26  
<p><strong>1. 解决问题的方法</strong></p>
<p><strong><br></strong>jQuery在 v1.3以后加入了jquery.support。 当你在用浏览器检测技术时,考虑一下能否使用特性检测。<br><br><strong>2. API</strong></p>
<p><strong><br></strong>其实最终在意是是如何使用这一段代码,最后提供的接口似乎有一点不统一。为什么 jMeteror.browserName 不是预料中的 jMeteror.browser.name ?<br><br><strong>3. 程序结构</strong></p>
<p>?</p>
<p>3a. 引入名称空间的方式,和声明它的位置有一点随意,随着程序的不断增长,将来可能很难理清程序的结构。可以像 YUI 一样把它抽象出来。?? 如:</p>
<p>?</p>
<pre name="code" class="js">YAHOO.namespace("jMeteor.browser");</pre>
<p>?</p>
<p>3b. 结构散乱,有太多的重复,最明显的莫过于下面这句:</p>
<p>?</p>
<p>?</p>
<pre name="code" class="js">  if (match ! = null) {
    reutrn {browser : match[1] || '',version:match[2] || '0'};
  } </pre>
<p>?</p>
<p>?</p>