2011-11-29 119 views
1

我需要一種方法來檢測瀏覽器是Safari 5還是更高版本 - 但JavaScript不應該依賴useragent,因爲它可以被覆蓋!有任何想法嗎?如何使用Javascript檢測瀏覽器是否爲Safari 5+?

+1

爲什麼你需要準備*非常罕見的情況下,用戶代理被欺騙?它有理由認爲有人在瀏覽器中執行此操作時,無法期望網站能夠正常工作。可能有一種方法可以使用功能檢測來執行此操作,但用戶代理字符串是檢測瀏覽器版本的最常用方法。 –

+6

與測試瀏覽器版本相比,檢測您感興趣的特定功能要好得多。你真的想要解決什麼問題? – jfriend00

+0

我有一個腳本在pre safari 5中不起作用,所以試圖檢查一個功能。在Websocket上是依靠...但想知道是否有人寫了更好的東西 – GeorgeU

回答

0
  1. 不可能在不接受用戶代理可以由最終用戶和/或瀏覽器本身修改的情況下可靠地檢測瀏覽器。

  2. 如點1的結果是幾乎總是最好使用功能的支持檢測(例如,諸如與Modernizr)。

  3. 由於有倍當需要特異性檢測一個瀏覽器,諸如禁用或啓用被誤報/不可檢測的特定能力,例如文件拖放在Safari 5

作爲一個例子,以下代碼提供了一個函數isFileDragAndDropSupported()這使得使用isSafari5()函數來返回文件拖動並且被支撐掉落在Safari 5不限定即使window.FileReader在Safari 5中。

function isSafari5() { 
    return !!navigator.userAgent.match(' Safari/') && !navigator.userAgent.match(' Chrom') && !!navigator.userAgent.match(' Version/5.'); 
}; 

function isFileAPIEnabled() { 
    return !!window.FileReader; 
}; 

function isFileDragAndDropSupported() { 
    var isiOS = !!navigator.userAgent.match('iPhone OS') || !!navigator.userAgent.match('iPad'); 
    return (Modernizr.draganddrop && !isiOS && (isFileAPIEnabled() || isSafari5())); 
}; 

注意:Modernizr僅用於isFileDragAndDropSupported()函數。 isSafari5()函數將獨立工作。

相關問題