檢測Web客戶端的手段不少,並且各有利弊,可是不到萬不得已,不要使用客戶端檢測。只要能找到更通用的方法,就應該採用更通用的方法。先設計最通用的方案,而後再使用特定於瀏覽器的技術加強該方案。瀏覽器
最經常使用最爲普遍使用的客戶端檢測形式,又稱特性檢測。能力檢測的目標不是識別特定的瀏覽器,而是識別瀏覽器的能力。採用這種方式沒必要顧及特定的瀏覽器如何如何,只要確認瀏覽器支持特定的能力,就能夠根據具體狀況,給出解決方案。
能力檢測有兩個重要的概念:bash
function isHostMethod(object,property){
var t = typeof object[property];
return t == 'function' || (!!(t=='object' && object[property])) || t == 'unknown';
}
複製代碼
使用方法:函數
result = isHostMethod(xhr,"open");//true
result = isHostMethod(xhr,"foo");//false
複製代碼
瀏覽器不是一會對這些實現方法一成不變的,每次瀏覽器更新版本都有可能改變這些能力特性的實現,因此要實時對代碼功能進行預測以及評估風險。最後能力檢測不是瀏覽器檢測,不少瀏覽器之間會有類似的能力特性,因此具體某特性不必定就是某瀏覽器。post
怪癖檢測的目的是識別瀏覽器的特殊行爲。可是與能力檢測確認瀏覽器支持什麼能力不一樣,怪癖檢測是想要知道瀏覽器存在什麼缺陷(「怪癖」也就是bug)。這一般須要運行一小段代碼,以確認某一特性不能正常工做。測試
通常來講,「怪癖」都是個別瀏覽器所獨有的,並且一般被歸爲bug。在相關瀏覽器的新版本中,這些問題可能會也可能不會被修復。因爲檢測「怪癖」涉及運行代碼,所以建議僅檢測那些對你有直接影響的「怪癖」,並且最好在腳本一開始就執行此類檢測,以便儘早解決問題。優化
客戶端檢測另外一部分是用戶代理檢測ui