2011-05-26 133 views
4

我知道browsersniffing不是爲多個瀏覽器設計網站的正確方法。然而,我的問題與設計一個適合每個瀏覽器的網站無關。瀏覽器嗅探

如果瀏覽器是谷歌瀏覽器或Firefox 4+,我想爲用戶提供將網站安裝爲網絡應用程序的能力,如果是Opera,則作爲小部件,如果是Safari,則作爲擴展程序......等等

基本上我想用一個提供這種安裝的按鈕在div中滑動。如果瀏覽器是Safari,則Safari不支持顯示webapp解決方案。

那麼我該如何做到這一點呢?

我發現這個基於特徵,而不是用戶代理

Safe feature-based way for detecting Google Chrome with Javascript?

var is = { 
    ff: window.globalStorage, 
    ie: document.all && !window.opera, 
    ie6: !window.XMLHttpRequest, 
    ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera, 
    ie8: document.documentMode==8, 
    opera: Boolean(window.opera), 
    chrome: Boolean(window.chrome), 
    safari: window.getComputedStyle && !window.globalStorage && !window.opera 
} 

這似乎爲我工作的需要,是短期和不笨重,或多或少惡搞安全

+0

在Chrome中is.safari == true(或者我需要Chrome升級)。 – 2011-05-26 07:15:51

+0

爲什麼你想要欺騙安全?你真的想過嗎?爲什麼人們會惡搞?我從來沒有需要,但如果有人想在Firefox下載你的Opera小部件,讓他們,他們可能有一個合法的理由。我不認爲如果某件事不起作用,那麼欺騙者就會抱怨,這實際上是他們自己做的。 – 2011-05-26 07:27:46

+0

這段代碼有幾個錯誤。你能更明確嗎?您想要定位哪個瀏覽器版本? – Knu 2011-05-27 23:09:49

回答

3

乘坐看看jQuery.browser:http://api.jquery.com/jQuery.browser/

$ .browser prop erty提供 關於網頁瀏覽器的信息, 正在訪問該頁面,如瀏覽器本身所報告的 。它包含四個最流行的 瀏覽器類(Internet Explorer, Mozilla,Webkit和Opera)以及 版本信息中的每一個的標記 。

可用的標誌是:

的WebKit(在jQuery 1.4的)野生動物園 (不建議使用)歌劇MSIE Mozilla時,這一 屬性將立即可用。它 因此可以安全地使用它來確定是否要調用 $(document).ready()來確定 。 $ jbrowser 屬性在jQuery 1.3, 中已棄用,其功能可能會移至 ,該版本是jQuery未來 發行版中的團隊支持的插件。

因爲$ .browser使用 的navigator.userAgent確定 平臺,更是容易受到 瀏覽器本身來欺騙用戶或失實陳述 。總是最好的 ,以儘可能避免瀏覽器專用代碼 。 $ .support 屬性可用於檢測 對特定功能的支持,而不是依賴$ .browser的 。

+0

尼斯,因爲我已經使用jquery,但它是欺騙欺騙 – Stofke 2011-05-26 07:12:22

1

不要擔心什麼被認爲是適當的。做什麼工作;在這種情況下,瀏覽器嗅探可能是最好的或唯一的選擇。

+0

這就是我的意思是良好的;-)東西有用,是未來的保障。 – Stofke 2011-05-26 07:11:35

+0

沒有什麼是未來的保障。我敢讓任何人證明我是錯的:^) – 2011-05-26 07:13:27

+0

你是對的,有些功能可能會被其他瀏覽器支持,使基於特徵的解決方案也不可靠。但這是現在最好的,我現在可以提出 – Stofke 2011-05-26 07:15:24

0

我永遠無法理解只使用性質進行導航對象的問題:

<script> 
    for(var item in navigator) 
    { 
     document.write('navigator.' + item + ': ' + navigator[item] + '<br>'); 
    } 
</script> 

他們說,navigator.userAgent是不可靠的,但做你的研究,它可以與navigator.appNamenavigator.vendor與之合併我認爲高可靠性。


更新:2013年3月

你必須直接測試,你想知道的事情,如果你試圖推斷出它,你就錯了。

例如。如果你想使用一個功能,直接測試它,不要假設如果document.all那麼你可以使用document.uniqueID。直接測試document.uniqueID

大家都知道,使用navigator.userAgent,以確定是否window.localStorage可以用太瘋狂了,但他們沒有意識到,ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera也在做同樣的事情向相反的方向。

如果你真的想知道用戶代理是什麼,那麼你所有可以關閉的都是navigator對象,遺憾的是。

用戶代理字符串欺騙不是問題,不是你的問題。

+0

那麼可以欺騙,這是它不可靠的原因 – Stofke 2011-05-26 07:10:57

+0

@Stofke:*所有*都可能被篡改。你只需要一個不錯的十六進制編輯器,然後離開你。您的所有檢測機制都可能被破壞。我的建議是不要擔心在這種情況下的少數派。 – 2011-05-26 07:14:57

+0

目前在問題中提到的方法是否可以被破解?我的意思是,它們不依賴於用戶代理或其他東西,它們依賴於特定瀏覽器支持的內置功能。他們如何被篡改? – SexyBeast 2013-03-04 22:18:52

0

您可以嘗試:BrowserHawk,(http://www.cyscape.com/showbrow.asp)哪一個瀏覽器在服務器端進行檢查。這將在確定向最終用戶展示什麼時在理論上減少瀏覽器端的處理。但是,我不認爲這是免費的。他們的特色客戶包括雅虎,美國在線,思科,微軟和Sun。因此,這僅適用於生產用途,只有在訪問該網站的最終用戶的期望值較高時。