判断浏览器的javascript版本的代码

 更新时间:2010年09月03日 23:33:54   作者:  
话说最近在研究某著名跟踪系统,在其给用户的实施代码中有一段判断浏览器Javascript版本的代码引起了我的注意,于是问了下google如何判断浏览器的javascript版本
他老人家说将所要执行的代码放在如< script language="JavaScript1.2" >所示嵌套下。但是当问到检测javascript版本时,得到如下代码:
复制代码 代码如下:

var JS_ver = [];
(Number.prototype.toFixed)?JS_ver.push("1.5"):false;
([].indexOf && [].forEach)?JS_ver.push("1.6"):false;
((function(){try {[a,b] = [0,1];return true;}catch(ex) {return false;}})())?JS_ver.push("1.7"):false;
([].reduce && [].reduceRight && JSON)?JS_ver.push("1.8"):false;
("".trimLeft)?JS_ver.push("1.8.1"):false;
JS_ver.supports = function()
{
if (arguments[0])
return (!!~this.join().indexOf(arguments[0] +",") +",");
else
return (this[this.length-1]);
}
alert("Latest Javascript version supported: "+ JS_ver.supports());
alert("Support for version 1.7 : "+ JS_ver.supports("1.7"));

这个脚本,既能通过检测特征来检测JavaScript版本,还能检查特定的Javascript版本所支持的特性。
得到了结果,我们还是看下此系统是如何检测javascript版本的吧,于是将其代码抽取出来(抽取过程相当纠结),得到如下所示代码:
复制代码 代码如下:

<script type="text/javascript">
var n = navigator;
var u = n.userAgent;
var apn = n.appName;
var v = n.appVersion;
var ie = v.indexOf('MSIE ')
if(ie > 0){
apv = parseInt(i = v.substring(ie + 5));
if(apv > 3) {
apv = parseFloat(i);
}
}else{
apv = parseFloat(v);
}
var isie = (apn == 'Microsoft Internet Explorer');
var ismac = (u.indexOf('Mac') >= 0);
var javascriptVersion = "1.0";
if(String && String.prototype){
javascriptVersion = '1.1';
if(javascriptVersion.match){
javascriptVersion = '1.2';
var tm = new Date;
if(tm.setUTCDate){
javascriptVersion = '1.3';
if(isie && ismac && apv >= 5) javascriptVersion = '1.4';
var pn = 0;
if(pn.toPrecision){
javascriptVersion = '1.5';
a = new Array;
if(a.forEach){
javascriptVersion = '1.6';
i = 0;
o = new Object;
tcf = new Function('o','var e,i=0;try{i=new Iterator(o)}catch(e){}return i');
i = tcf(o);
if(i && i.next) {
javascriptVersion = '1.7';
}
}
}
}
}
}
alert(javascriptVersion);
</script>

代码实现原理:根据不同版本的javascript对于一些特定函数的支持不同从而判断其版本所在。其中仅对1.4版本有一个特殊处理。

相关文章

  • js实现div模拟模态对话框展现URL内容

    js实现div模拟模态对话框展现URL内容

    这篇文章主要介绍了js实现div模拟模态对话框展现URL内容的功能,涉及javascript动态操作页面元素样式与ajax调用的相关技巧,需要的朋友可以参考下
    2016-05-05
  • js动态设置关键侦@keyframes的方法技巧

    js动态设置关键侦@keyframes的方法技巧

    这篇文章主要给大家介绍了关于js动态设置关键侦@keyframes的方法技巧,@keyframes规则通过在动画序列中定义关键帧(或waypoints)的样式来控制CSS动画序列中的中间步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • 小程序hover-class点击态效果实现

    小程序hover-class点击态效果实现

    这篇文章主要介绍了小程序hover-class点击态效果实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • echart自适应宽度的两种方法实例

    echart自适应宽度的两种方法实例

    最近工作中element后台管理使用Echarts图表,在使用过程中也遇到了些问题,下面这篇文章主要给大家介绍了关于echart自适应宽度的两种方法,需要的朋友可以参考下
    2022-12-12
  • JavaScript中setInterval的用法总结

    JavaScript中setInterval的用法总结

    这篇文章主要是对JavaScript中setInterval的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • 解析Javascript中难以理解的11个问题

    解析Javascript中难以理解的11个问题

    这篇文章主要是对Javascript中难以理解的11个问题进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • 一些常用弹出窗口/拖放/异步文件上传等实用代码

    一些常用弹出窗口/拖放/异步文件上传等实用代码

    今天写一点工作中遇到的东西【弹出窗口】【拖放】【异步文件上传】,大家共同学习,共同进步
    2013-01-01
  • Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法

    Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法

    今天小编就为大家分享一篇Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JSChart轻量级图形报表工具(内置函数中文参考)

    JSChart轻量级图形报表工具(内置函数中文参考)

    JSChart是一个轻量级的在线图表生成工具,本身十分小巧,简单易用,相对来讲功能也不是特别强大,但是对于一些要求不高的应用来讲已经够用了,最近两天在做一个监控系统,想到了它。
    2010-10-10
  • JS简单获取当前年月日星期的方法示例

    JS简单获取当前年月日星期的方法示例

    这篇文章主要介绍了JS简单获取当前年月日星期的方法,结合完整实例形式分析了javascript基于自定义函数获取当前日期时间的方法,涉及javascript中Date()类的使用与日期相关运算技巧,需要的朋友可以参考下
    2017-02-02

最新评论