在現實當中,瀏覽器之間的差別以及不一樣瀏覽器的怪癖,多得不勝枚舉。所以,客戶端檢測除了是一種補救措施以外,更是一種行之有效的開發策略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
用戶代理檢測是客戶端檢測的最後一個選擇。只要可能應該優先採用能力檢測,怪癖檢測次之
用戶代理檢測通常適用於下列狀況: