《JavaScript高级语言设计》(第三版)学习笔记(5)
来源:互联网 发布:mac物理地址不匹配 编辑:程序博客网 时间:2024/06/09 18:24
客户端能力检测和客户端识别
能力检测基本模式
if(object.propertyInQuestion){//方法,如果浏览器不支持此方法则为false 调用方法}function isHaveSortMethod(object){ return typeof object.ort == "function";}//检测某个对象的特性是否存在function isHostMethod(object,property){ var t = typeof object[property]; return t == 'function'||(!!(t == 'object'&& object[property]) || t == 'unknown');}//确定浏览器是否支持Netscape风格的插件var hasNSPlugins = !!(navigator.plugins && navigator.plugins.length);//确定浏览器是否具有DOM1级的能力var hasDOM1 = !!(document.getElementById && document.createElement && document.getElementByTagName);//IE8以及更早的版本存在一个bug,如果摸个实例属性与[[Enumerable]]标记为false的摸个原型属性同名,则该实例属性将不会出现在for-in循环中var hasDontEnumQuirk = function(){ var o = {toString : function(){}}; for(var prop in o){ if(prop == "toString"){ return false; } } return true;}();//Safari3以前版本会枚举被隐藏的属性var hasEnumShadowQuirk = function(){ var o = {toString : function(){}}; var count = 0; for(var prop in o){ if(prop == "toString"){ count++; } } return (count > 1);}();
//用户代理检测脚本var client = function(){ var engine = { ie : 0, gecko : 0, webkit : 0, khtml : 0, opera : 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, iphone : false, ipod : false, ipad : false, ios : false, android : false, nokiaN : false, winMobile : false, wii : false, ps : false }; var ua = navigator.userAgent; if(window.opera){ enegine.ver = browser.ver = window.opera.version(); engine.opera = browser.opera = parseFloat(engine.ver); }else if(/AppleWebKit\/(\S+)/.test(ua)){ engine.ver = RegExp["$1"]; engine.webkit = parseFloat(engine.ver); engine.webkit = parseFloat(engine.ver); //确定Chrome还是Safari if(/Chrome\/(\S+)/.test(ua)){ browser.ver = RegExp["$1"]; browser.chrome = parseFloat(browser.ver); }else if (/Version\/(\S+)/.test(ua)){ browser.ver = RegExp["$1"]; browser.safari = parseFloat(browser.ver); } else { //近似地确定版本号 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(/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)){ engine.ver = RegExp["$1"]; engine.gecko = parseFloat(engine.ver); //确定是不是Firefox if (/Firefox\/(\S+)/.test(ua)){ browser.ver = RegExp["$1"]; browser.firefox = parseFloat(browser.ver); } }else if (/MSIE ([^;]+)/.test(ua)){ engine.ver = browser.ver = RegExp["$1"]; engine.ie = browser.ie = parseFloat(engine.ver); } //检测浏览器 browser.ie = engine.ie; browser.opera = engine.opera; //检测平台 var p = navigator.platform; system.win = p.indexOf("Win") == 0; system.mac = p.indexOf("Mac") == 0; system.x11 = (p == "X11") || (p.indexOf("Linux") == 0); //检测Windows 操作系统 if (system.win){ if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){ if (RegExp["$1"] == "NT"){ switch(RegExp["$2"]){ case "5.0": system.win = "2000"; break; case "5.1": system.win = "XP"; break; case "6.0": system.win = "Vista"; break; case "6.1": system.win = "7"; break; default: system.win = "NT"; break; } } else if (RegExp["$1"] == "9x"){ system.win = "ME"; } else { system.win = RegExp["$1"]; } } } //移动设备 system.iphone = ua.indexOf("iPhone") > -1; system.ipod = ua.indexOf("iPod") > -1; system.ipad = ua.indexOf("iPad") > -1; system.nokiaN = ua.indexOf("NokiaN") > -1; //windows mobile if (system.win == "CE"){ system.winMobile = system.win; } else if (system.win == "Ph"){ if(/Windows Phone OS (\d+.\d+)/.test(ua)){; system.win = "Phone"; system.winMobile = parseFloat(RegExp["$1"]); } } //检测iOS 版本 if (system.mac && ua.indexOf("Mobile") > -1){ if (/CPU (?:iPhone )?OS (\d+_\d+)/.test(ua)){ system.ios = parseFloat(RegExp.$1.replace("_", ".")); } else { system.ios = 2; //不能真正检测出来,所以只能猜测 } //检测Android 版本 if (/Android (\d+\.\d+)/.test(ua)){ system.android = parseFloat(RegExp.$1); } //游戏系统 system.wii = ua.indexOf("Wii") > -1; system.ps = /playstation/i.test(ua); //返回这些对象 return { engine: engine, browser: browser, system: system };}();
//DOM能力检测var hasXmlDom = document.implementation.hasFeature("XML", "1.0");//第一个为功能,第二个为版本号
0 0
- 《JavaScript高级语言设计》(第三版)学习笔记(5)
- 《JavaScript高级语言设计》(第三版)学习笔记(1)
- 《JavaScript高级语言设计》(第三版)学习笔记(2)
- 《JavaScript高级语言设计》(第三版)学习笔记(3)
- 《JavaScript高级语言设计》(第三版)学习笔记(4)
- 《JavaScript高级语言设计》(第三版)学习笔记(6)
- 《JavaScript高级语言设计》(第三版)学习笔记(7)
- 《JavaScript高级语言设计》(第三版)学习笔记(8)
- JavaScript高级程序设计(第三版)学习笔记(1)
- JavaScript高级程序设计(第三版)学习笔记(2)
- 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
- 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
- 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
- JavaScript 高级程序设计——第三章基本概念 学习笔记
- javascript高级程序设计学习笔记——第三章 基本概念
- 《JavaScript高级程序设计》学习笔记(第三章)
- SQL SERVER设计与高级查询 第三章 学习笔记
- 《JavaScript高级程序设计 第三版》学习笔记 (一)数据类型详解
- Spring源码解读:Envrionment接口
- php实现伪静态
- eclipse转Android studio的小差异
- Navicat 2003-can't connect to MYSQL server on 'localhost'(10061)
- 输入字符串的格式不正确。
- 《JavaScript高级语言设计》(第三版)学习笔记(5)
- HTML5复习 (1)
- 当Navicat for Mysql出现 1045 -Access denied for user'root'@'ipAddress'(using password :yes)
- 单例模式
- 解决腾讯云服务器启动tomcat巨慢导致浏览器无法加载的方案
- File.io读取文件(四)
- js 微信端 信息一键导入 通讯录
- 【Java Utility】Jsoup网页爬虫工具--从URL加载Document【五】
- 观察者模式的两种实现和比较