`
shenjc2008
  • 浏览: 137666 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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 //语言


分享到:
评论
8 楼 heymaomao 2011-05-26  
我把Jquery相关代码更改后,第一句有错误,不能使用了
var userAgent = navigator.userAgent, 这一句,我查到下面有
userAgent = navigator.userAgent,这句,然后我把这句删除,还是提示有语法错误,不知道为啥,我用的最新版本,1.6.1
7 楼 balaschen 2011-05-25  
个人观点,还是检测浏览器内核比较好,这样兼容性更好
6 楼 balaschen 2011-05-25  
碰到国产山寨浏览器,比如遨游,你就杯具了
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>
<p>最后,我简单地重写了一下,没有测试过,纯属讨论。</p>
<p> </p>
<p> </p>
<pre name="code" class="js">jMeteor.browser || (jMeteor.browser = (function(){
  var navigatorString = navigator.userAgent.toLowerCase(),
    rBrowsers = [
      /.*(msie) ([\w.]+).*/,
      /.*(firefox)\/([\w.]+).*/,
      /(opera).+version\/([\w.]+)/, 
      /.*(chrome)\/([\w.]+).*/,
      /.*version\/([\w.]+).*(safari).*/
    ],
   
    ret = {
      language: navigator.language || navigator.userLanguage || ''
    };
   
  for (var i = 0; i &lt; rBrowsers.length; ++i)(function(match) {
    if ( match ) {
      ret.name = match[1] || 'none';
      ret.version = match[2] || '0';
      ret[ret.name] = true;
    }
  })( regBrowsers[i].exec(navgatorString) )

  return ret;
}()));</pre>
 
<p> </p>
<p> </p>
<p> </p>
4 楼 yszdl196 2011-04-22  
jMeteor是在哪定义的啊?
3 楼 50980487 2011-04-22  
学习了,谢谢分享!!!
2 楼 ONEBOYS 2011-04-18  
我一般用到两个判断
判断是否为ie
判断是否为ie6
1 楼 y11111494 2011-04-18  
?????????????

相关推荐

Global site tag (gtag.js) - Google Analytics