论坛首页 Web前端技术论坛

js判断浏览器(支持区分ie、firefox、opera、chrome、safari)

浏览 16411 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-17  
看到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 //语言


   发表时间:2011-04-18  
我一般用到两个判断
判断是否为ie
判断是否为ie6
0 请登录后投票
   发表时间:2011-04-22  
学习了,谢谢分享!!!
0 请登录后投票
   发表时间:2011-04-22  
jMeteor是在哪定义的啊?
0 请登录后投票
   发表时间:2011-04-26   最后修改:2011-04-26

1. 解决问题的方法


jQuery在 v1.3以后加入了jquery.support。 当你在用浏览器检测技术时,考虑一下能否使用特性检测。

2. API


其实最终在意是是如何使用这一段代码,最后提供的接口似乎有一点不统一。为什么 jMeteror.browserName 不是预料中的 jMeteror.browser.name ?

3. 程序结构

 

3a. 引入名称空间的方式,和声明它的位置有一点随意,随着程序的不断增长,将来可能很难理清程序的结构。可以像 YUI 一样把它抽象出来。   如:

 

YAHOO.namespace("jMeteor.browser");

 

3b. 结构散乱,有太多的重复,最明显的莫过于下面这句:

 

 

  if (match ! = null) {
    reutrn {browser : match[1] || '',version:match[2] || '0'};
  }	

 

 

最后,我简单地重写了一下,没有测试过,纯属讨论。

 

 

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 < 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;
}()));
 

 

 

 

0 请登录后投票
   发表时间:2011-05-25  
碰到国产山寨浏览器,比如遨游,你就杯具了
0 请登录后投票
   发表时间:2011-05-25  
个人观点,还是检测浏览器内核比较好,这样兼容性更好
0 请登录后投票
   发表时间:2011-05-26  
我把Jquery相关代码更改后,第一句有错误,不能使用了
var userAgent = navigator.userAgent, 这一句,我查到下面有
userAgent = navigator.userAgent,这句,然后我把这句删除,还是提示有语法错误,不知道为啥,我用的最新版本,1.6.1
0 请登录后投票
   发表时间:2011-11-14  
请问有什么方法可以判断是移动设备,比如手机登陆的么 并决定页面跳转的路径
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics