在现实当中,浏览器之间的差别以及不一样浏览器的怪癖,多得不胜枚举。所以,客户端检测除了是一种补救措施以外,更是一种行之有效的开发策略javascript
检测 web 客户端的手段有不少,并且各有利弊。但最重要的是要知道,不到万不得已,就不要使用客户端检测!若是能找到更通用的方法,应优先采用更通用的方法。既是,先设计通用的方案,在针对差别加强该方案
能力检测的目标不是识别特定浏览器,而是识别浏览器的能力。只要肯定浏览器的能力,就能够给出特定解决方案java
例如:早期针对 IE 的检测:android
function getElement(id) { if (document.getElementById) { return document.getElementById(id); } else if (document.all) { return document.all[id]; } else { throw new Error('getElementById不可用'); } }
识别浏览器的特殊行为,检测该浏览器存在什么缺陷ios
例如 : IE8 及更早版本,有个 bug,新增属性若是与某个 Enumerable 标为 false 的原型属性同名,for in 循环没法遍历出它。web
用户代理经过检测用户代理字符串来肯定实际使用的浏览器。在服务器端,这是一种经常使用且广为接受的作法,而在客户端,则被当作万不得已才用的作法,优先级在能力检测和怪癖检测以后。chrome
因为历史缘由,有些引擎返回的 ua 中存在诸多不一致的地方。因此在检测的时候,检测的顺序很重要
Opera --> Webkit --> KHTML --> Gecko --> IE.windows
大多数状况下,识别呈现引擎足以让咱们才去正确的操做。可是,只有呈现引擎还不能说明存在所需的 js 功能。例如,safari 和 chrome 的呈现引擎都是 webkit,但他们的 js 引擎却不同。
浏览器:IE , Firefox,safari,konq,opera,chrome浏览器
经过 navigator.platform 来检测不一样的平台。
navigator.platform 属性可能的值包括:" Win32 " , " Win64 " , " MacPPC " , " MacIntel " , " X11 " , " Linux i686 ".服务器
经过检测 userAgent 中的字符串,用正则识别不一样的 windows 版本
win2000 以后,大部分浏览器表示操做系统的字符串大部分相同,只有版本号有变化。操作系统
Wii 或 playstation
用户代理检测是客户端检测的最后一个选择。只要可能应该优先采用能力检测,怪癖检测次之
用户代理检测通常适用于下列状况: