2012-06-07 79 views
0

我們正在構建一個小書籤,我們想知道如果我們能夠在客戶端使用JavaScript更準確地檢測瀏覽器和版本號,而不是使用代理在服務器端執行此操作。檢測瀏覽器/版本與JavaScript與檢測服務器端?

我們會將檢測結果推送到主要請求的服務器。

問題是,這種方法可以更好地工作並且更準確嗎?或者兩者都可以做同樣的錯誤,而JavaScript本身是由用戶代理計算的(可以通過插件/代理改變)。

重要

請不要忘記,我們正在建設一個書籤,所以我們無法加載像Modernizr的和JQuery花哨的工具,因爲它不工作了快。

+0

有很多理由想知道用戶瀏覽器... imo沒有功能檢測納粹的回答這個合法的問題。關於一些行業標準工具集中的一些最佳類別的好帖子:http://robert.accettura.com/blog/2009/11/30/browser-detection-in-javascript-libraries/ – Shanimal

回答

2

我可能是錯的,但我認爲JS還使用用戶代理。到目前爲止,我還沒有看到JS瀏覽器檢測代碼不能從用戶代理進行計算。糾正我,如果我錯了。如果這有助於您嘗試使用JQuery $.support屬性檢測/支持您需要的特定功能,而不是依賴瀏覽器名稱和版本。僞造你的用戶代理很容易。

根據thisnavigator對象使用用戶代理標頭。

+0

'jQuery.support'不使用userAgent,但是如果您依賴於使用userAgent,那麼會使用** jQuery。可以使用瀏覽器**和** jQuery.browser.version **。這兩個都使用'userAgent'。 –

-1

也許這可以幫助

<div id="example"></div> 

<script type="text/javascript"> 

txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>"; 
txt+= "<p>Browser Name: " + navigator.appName + "</p>"; 
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>"; 
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>"; 
txt+= "<p>Platform: " + navigator.platform + "</p>"; 
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>"; 

document.getElementById("example").innerHTML=txt; 

</script> 

參考:http://www.w3schools.com/js/js_browser.asp

+0

除'navigator.appVersion'外和「navigator.userAgent」,其餘的完全無法使用(例如,Chrome爲'navigator.appName'返回「Netscape」) – lanzz

1

爲什麼要檢測用戶代理?你打算依賴用戶代理運行不同的JavaScript嗎? JQuery和/或Mootools提供了一個抽象層來處理不同的瀏覽器JS。此外,媒體查詢和其他API可以檢測諸如視口大小,分辨率等內容以促進內容自適應。如果您想爲完全不同的用戶代理提供完全不同的資源,那麼服務器端內容協商更可取。在這種情況下,您可以使用類似Apache Mobile Filter(基於WURFL設備存儲庫)的方式從用戶代理字符串中檢測瀏覽器功能。

最後,如果你想確保網絡/代理不符合你的要求亂動,然後用下面的指令在下面的HTTP請求和響應頭:

Cache-Control: no-transform 

這可以被設置在使用JQuery進行AJAX請求之前(或者簡單地設置XmlHttpRequest對象),也可以在您的Apache配置中設置響應。

0

你真的不應該檢測瀏覽器,但檢測可用的功能,而不是,除非你的整個任務歸結爲正是 - 就像從一些統計目的檢測瀏覽器或有一些具體的問題,對於一些瀏覽器,成功地報告支持功能,但並不真正支持它或有缺陷(認爲IE6的PNG支持)。 Modernizr等可以幫助你進行功能檢測,如果你不想手動編碼。

如果仍想瀏覽器檢測,然後是,你從不是從服務器客戶端JS更多的機會。在服務器上,您僅限於分析可由代理或客戶端自身剝離或破壞的User-Agent頭,但在JS中,除了檢查用戶代理字符串外,還可以檢測環境中是否存在特定於瀏覽器的對象或在實現某些功能時檢查瀏覽器特定的怪癖,以準確地檢測出您真正使用的瀏覽器。然而,唯一的缺點是用戶必須啓用JS。

舉一個簡單的例子,檢查如果你有ActiveXObject訪問,會告訴你,你在Internet Explorer中是並檢查是否有本地JSON.parse可用才能證明它是在標準模式或以上/兼容模式7版本而不是,不管多少用戶代理字符串被損壞。