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


Posted in Javascript onSeptember 03, 2010

他老人家说将所要执行的代码放在如< 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版本有一个特殊处理。
Javascript 相关文章推荐
jQuery ajax(复习)—Baidu ajax request分离版
Jan 24 Javascript
javascript实现文本域写入字符时限定字数
Feb 12 Javascript
jQuery控制Div拖拽效果完整实例分析
Apr 15 Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 Javascript
Webpack 服务器端代码打包的示例代码
Sep 19 Javascript
vue中的event bus非父子组件通信解析
Oct 27 Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 Javascript
详解Vue.js v-for不支持IE9的解决方法
Dec 29 Javascript
JS原生瀑布流效果实现
Apr 26 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
Vue+abp微信扫码登录的实现代码示例
Jan 06 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 #Javascript
JavaScript的类型简单说明
Sep 03 #Javascript
JavaScript类和继承 this属性使用说明
Sep 03 #Javascript
JavaScript类和继承 prototype属性
Sep 03 #Javascript
用Javascript实现Sleep暂停功能代码
Sep 03 #Javascript
javascript 仿QQ滑动菜单效果代码
Sep 03 #Javascript
原生javascript实现图片轮播效果代码
Sep 03 #Javascript
You might like
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
使用php清除bom示例
2014/03/03 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
JavaScript arguments 多参传值函数
2010/10/24 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
python中文编码问题小结
2014/09/28 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
python实现名片管理器的示例代码
2019/12/17 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
Python持续监听文件变化代码实例
2020/07/22 Python
教师学习培训邀请函
2014/02/04 职场文书
2015年春节标语口号
2014/12/09 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
Python图片处理之图片裁剪教程
2021/05/27 Python