JS判断浏览器与版本相关
成功志
JS判断浏览器与版本相关
2012-3-31 ok12

JS判断浏览器与版本相关


第一种(比较高效):


   <script type="text/javascript">

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

    </script>


 其中,采用了“... ? ... : ...”这样的判断表达式来精简代码。判断条件是一条赋值语句,既完成正则表达式的匹配及结果复制,又直接作为条件判断。而随后的版本信息只需从前面的匹配结果中提取即可,这是非常高效的代码。


       以上的代码都是为了打造前端框架所做的预研,并在五大浏览器上测试通过。今后,判断某种浏览器只需用if(Sys.ie)或if(Sys.firefox)等形式,而判断浏览器版本只需用if(Sys.ie == '8.0')或if(Sys.firefox == '3.0')等形式,表达起来还是非常优雅的。


第二种:对象/特征检测法


该方法是一种判断浏览器能力(而非浏览器的确切型号)的通用方法。大部分JS专家认为这个方法最合适,因为他们认为按照该方法所编写的脚本是经得起未来考验的。

//获取IE浏览器的版本号

//返回数值,显示IE的主版本号

function getIEVer() {

  var ua = navigator.userAgent; //获取用户端信息

  var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置

  if (b < 0) {

    return 0;

  }

  return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值

}

alert(getIEVer()); //返回数值8(我的IE8)

如果更关注浏览器的能力而不在乎它实际的身份,就可以使用这种方法。


第三种:user-agent字符串检测法


user-agent字符串提供了关于Web浏览器的大量信息,包括浏览器的名称和版本。

var ua = navigator.userAgent.toLowerCase();  //获取用户端信息

var info = {

  ie: /msie/.test(ua) && !/opera/.test(ua),    //匹配IE浏览器

  op: /opera/.test(ua),   //匹配Opera浏览器

  sa: /version.*safari/.test(ua),   //匹配Safari浏览器

  ch: /chrome/.test(ua),   //匹配Chrome浏览器

  ff: /gecko/.test(ua) && !/webkit/.test(ua)   //匹配Firefox浏览器

};

(info.ie) && alert("IE浏览器");

(info.op) && alert("Opera浏览器");

(info.sa) && alert("Safari浏览器");

(info.ff) && alert("Firefox浏览器");

(info.ch) && alert("Chrome浏览器");

通常我们做得最多的,就是判断是否是IE了,其它几种浏览器一般都会符合标准.有些客户只需要符合IE和FF就已经满足了.那么我们可以这样做:

var isIE = (navigator.appName == "Microsoft Internet Explorer");

判断IE远远不止上面一种方法,可以使用IE更多特有的东西,如:window.ActiveXObject,document.all等,这些都属于对象/特征检测法了!通常要在不同的浏览器上写不同的样式(因为IE样式解析也各有不同),那就得判断版本了.可以这样做

//获取IE浏览器的版本号

//返回数值,显示IE的主版本号

function getIEVer() {

  var ua = navigator.userAgent; //获取用户端信息

  var b = ua.indexOf("MSIE "); //检测特殊字符串"MSIE "的位置

  if (b < 0) {

    return 0;

  }

  return parseFloat(ua.substring(b + 5, ua.indexOf(";", b))); //截取版本号字符串,并转换为数值

}

alert(getIEVer()); //返回数值7




附一:


检测操作系统:

var isWin = (navigator.userAgent.indexOf("Win") != -1); //如果是Windows系统,则返回true

var isMac = (navigator.userAgent.indexOf("Mac") != -1);   //如果是Macintosh系统,则返回true

var isUnix = (navigator.userAgent.indexOf("X11") != -1);   //如果是Unix系统,则返回true

var isLinux = (navigator.userAgent.indexOf("Linux") != -1);   //如果是Linux系统,则返回true


附二:

最短的判断IE代码:

俄国人写的只有6 bytes!它利用了IE与标准浏览器在处理数组的toString方法的差异做成的。对于标准游览器,如果数组里面最后一个字符为逗号,JS引擎会自动剔除它。详见这里 恭喜你,Aleko ,你真是我的偶像!

var ie = !-[1,];

================================

<script type="text/javascript">

var ie = !-[1,];

alert(ie);

</script>

================================

var notIE = -[1,];

================================

<script type="text/javascript">

if(-[1,]){

alert("这不是IE浏览器!");

}else{

alert("这是IE浏览器!");

}

</script>

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容