2013-03-07 251 views
0

我需要爲當前項目的觸摸設備添加某種支持。由於這是我第一次必須做這樣的事情,我看了一些「製作精良」的網站的代碼,看看他們是如何做到的。JavaScript瀏覽器檢測?

一個頁面確實是這樣的:

if(document.querySelectorAll && (navigator.platform == "iPad" || navigator.platform.substring(0, 6) == "iPhone" || navigator.platform == "iPod" || navigator.userAgent.indexOf('Android') > -1)) {...}

我測試了所有我手邊的設備和它的作品,但請告訴我,那是正常的做這樣?有沒有一種「正確」的方式來做到這一點?

我問,因爲here我讀過,檢測瀏覽器應該是可以避免的,而不是檢測對象應使用。現在我看到他們也在測試document.querySelectorAll這是對象檢測,所以也許所有的東西只是某種安全網而已?

回答

0

您使用的代碼非常非常明智的:任何簡單的字符插入在一開始會使其失敗。

您可以用的東西取代它像

if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|Mini/i.test(navigator.userAgent)) { ... 

但是你應該知道,檢測設備是危險的,因爲他們可能會更豐富,又是什麼人認爲:有些人比一些更好的CPU,網絡接入或屏幕桌面瀏覽器。所以對於大多數用途,最好檢測你需要的功能。

如果您打算根據可用設備維護您的站點,但是有其他解決方案(例如Modernizrspecific tests等庫),則我認爲可以合理檢測觸摸屏。

+0

對最後一個鏈接的良好通話。由於上述原因,特徵檢測優於瀏覽器嗅探IMO,但最後一個鏈接是爲什麼以及如何測試特定特徵的一個很好的例子。 – Phix 2013-03-07 08:08:26

1

應該避免瀏覽器檢測,是的。因爲瀏覽器可以更改。

今天,也許谷歌瀏覽器不支持的功能。但是明天Chrome應該會更新並支持它。

所以,如果你這樣做if (!isGoogleChrome()),當天在Chrome更新,你必須更新你的代碼。

你應該做的物體檢測。 例如,如果你想確保一個函數/對象是在這裏,只是測試它:

if (document.querySelectorAll !== undefined) { 
    //... 
} 

你也可以使用http://modernizr.com/,它可以檢測到您當前的瀏覽器功能。

+0

這裏的問題是:Modernizr無法檢測到設備是否有觸摸屏。 – Sven 2013-03-07 07:52:40