JavaScript客户端检测
来源:互联网 发布:显卡升级软件下载 编辑:程序博客网 时间:2024/05/22 20:34
客户端检测-筆記
《JavaScript 高级程序设计——第9章》
优先采用能力检测和怪癖检测。
//检测浏览器下测试任何对象的某个特性是否存在——不保证永远可靠//该方法目前(书中):可靠// 作者: Peter Michauxfunction isHostMethod(object, property) { var t = typeof object[property]; return t == 'function' || (!!(t == 'object' && object[property])) || t == 'unknown';}result = isHostMethod(xhr, "open");result = isHostMethod(xhr, "foo");
一次性檢測
var hasNsPlug = !!(navigator.plugins && navigator.plugins.length);// 確定瀏覽器是否支持Netscape風格的插件
var hasDOM1 = !!(document.getElementById && document.createElement && document.getElementsByTagName);//確定瀏覽器是否具有DOM1級規定的能力
怪癖檢測(bug檢測)
var hasDontEnumQuirk = function() { for (var prop in o) { if (prop == "toString") { return false; } } return true;}()
用戶代理檢測
var client=function(){ var engine={ //呈现引擎 trident:0, gecko:0, webkit:0, khtml:0, presto:0, ver:null //具体的版本号 }; var browser={ //浏览器 ie:0, firefox:0, safari:0, konq:0, opera:0, chrome:0, ver:null //具体的版本号 }; var system={ //操作系统 win:false, mac:false, x11:false }; var ua=navigator.userAgent; if(/AppleWebKit\/(\S+)/.test(ua)){ //匹配Webkit内核浏览器(Chrome、Safari、新Opera) engine.ver=RegExp["$1"]; engine.webkit=parseFloat(engine.ver); if(/OPR\/(\S+)/.test(ua)){ //确定是不是引用了Webkit内核的Opera browser.ver=RegExp["$1"]; browser.opera=parseFloat(browser.ver); }else if(/Chrome\/(\S+)/.test(ua)){ //确定是不是Chrome browser.ver=RegExp["$1"]; browser.chrome=parseFloat(browser.ver); }else if(/Version\/(\S+)/.test(ua)){ //确定是不是高版本(3+)的Safari browser.ver=RegExp["$1"]; browser.safari=parseFloat(browser.ver); }else{ //近似地确定低版本Safafi版本号 var SafariVersion=1; if(engine.webkit<100){ SafariVersion=1; }else if(engine.webkit<312){ SafariVersion=1.2; }else if(engine.webkit<412){ SafariVersion=1.3; }else{ SafariVersion=2; } browser.safari=browser.ver=SafariVersion; } }else if(window.opera){ //只匹配拥有Presto内核的老版本Opera 5+(12.15-) engine.ver=browser.ver=window.opera.version(); engine.presto=browser.opera=parseFloat(engine.ver); }else if(/Opera[\/\s](\S+)/.test(ua)){ //匹配不支持window.opera的Opera 5-或伪装的Opera engine.ver=browser.ver=RegExp["$1"]; engine.presto=browser.opera=parseFloat(engine.ver); }else if(/KHTML\/(\S+)/.test(ua)||/Konqueror\/([^;]+)/.test(ua)){ engine.ver=browser.ver=RegExp["$1"]; engine.khtml=browser.konq=parseFloat(engine.ver); }else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){ //判断是不是基于Gecko内核 engine.ver=RegExp["$1"]; engine.gecko=parseFloat(engine.ver); if(/Firefox\/(\S+)/.test(ua)){ //确定是不是Firefox browser.ver=RegExp["$1"]; browser.firefox=parseFloat(browser.ver); } }else if(/Trident\/([\d\.]+)/.test(ua)){ //确定是否是Trident内核的浏览器(IE8+) engine.ver=RegExp["$1"]; engine.trident=parseFloat(engine.ver); if(/rv\:([\d\.]+)/.test(ua)||/MSIE ([^;]+)/.test(ua)){ //匹配IE8-11+ browser.ver=RegExp["$1"]; browser.ie=parseFloat(browser.ver); } }else if(/MSIE ([^;]+)/.test(ua)){ //匹配IE6、IE7 browser.ver=RegExp["$1"]; browser.ie=parseFloat(browser.ver); engine.ver=browser.ie-4.0; //模拟IE6、IE7中的Trident值 engine.trident=parseFloat(engine.ver); } var p=navigator.platform; //判断操作系统 system.win=p.indexOf("Win")==0; system.mac=p.indexOf("Mac")==0; system.x11=(p.indexOf("X11")==0)||(p.indexOf("Linux")==0); if(system.win){ if(/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){ if(RegExp["$1"]=="NT"){ system.win = ({ "5.0" : "2000", "5.1" : "XP", "6.0" : "Vista", "6.1" : "7", "6.2" : "8", "6.3" : "8.1", "10" : "10" })[RegExp["$2"]] || "NT"; }else if(RegExp["$1"]=="9x"){ system.win="ME"; }else{ system.win=RegExp["$1"]; } } } return { ua:ua, //用户浏览器Ua原文 engine:engine, //包含着用户浏览器引擎(内核)信息 browser:browser,//包括用户浏览器品牌与版本信息 system:system //用户所用操作系统及版本信息 };}();
alert(client.ua);var browserName=""; //保存当前使用的浏览器品牌信息var browserVer=0; //保存当前使用的浏览器版本信息for(var i in client.browser){ if(client.browser[i]){ browserName=i; browserVer=client.browser[i]; break; }}var useEngine=""; //保存当前浏览器引擎(内核)名称var engineVer=0; //保存当前使用的浏览器引擎版本for(var i in client.engine){ if(client.engine[i]){ useEngine=i; engineVer=client.engine[i]; break; }}var useSystem=""; //保存当前操作系统信息for(var i in client.system){ if(client.system[i]){ i== "win"?useSystem = "Windows "+client.system[i]:useSystem=i; break; }}alert( "当前使用的浏览器:"+browserName + "\n浏览器版本:"+browserVer + "\n浏览器内核:"+useEngine + "\n内核版本:"+engineVer + "\n当前操作系统:"+useSystem);
阅读全文
0 0
- javascript----------客户端检测
- javascript 客户端版本检测
- javascript 客户端能力检测
- javascript客户端检测浏览器
- javascript客户端检测技术
- javascript客户端检测技术
- JavaScript客户端检测技术
- JavaScript客户端检测
- JavaScript笔记:客户端检测
- javascript(客户端检测)
- JavaScript客户端检测
- JavaScript-客户端检测
- javascript检测客户端flash插件
- 检测客户端javascript是否禁用
- JavaScript笔记七:客户端检测
- JavaScript BOM与客户端检测
- 《javascript高级程序设计》客户端检测学习笔记
- JavaScript基础——客户端检测
- Hive On Spark报错:Failed to execute spark task, org.apache.hadoop.hive.ql.metadata.HiveException
- 顺序栈-数组实现
- Java模仿实现Windows时钟日历
- Tensorflow_GPU
- MAC安装配置Tornado
- JavaScript客户端检测
- app:transformClassesWithDexForDebug错误记录
- Android Studio运行或Rebuild的时候报Error:Execution failed for task ':app:compileDebugNdk'.的解决办法
- 对字符编码的一些理解
- 数字签名(代码签名)流程和数字签名的验证
- 目录
- 读《JAVA并发实践》笔记---第一章(介绍),第二章(线程安全)
- java程序如何调用C++代码
- 51nod 1315 合法整数集问题(预处理)