簡體   English   中英

使用javascript檢測瀏覽器/版本與服務器端檢測?

[英]Detecting browser/version with javascript vs. detecting on server side?

我們正在構建一個書簽,我們想知道我們是否能夠在客戶端使用JavaScript檢測瀏覽器和版本號比使用代理在服務器端執行更准確。

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

問題是,這種方法能更好地運作並且更准確嗎? 或者兩者都可以做同樣的錯誤,JavaScript本身也可以從用戶代理計算(可以通過插件/代理進行更改)。

重要

請不要忘記我們正在構建一個bookmarklet ,因此我們無法加載像Modernizr和JQuery這樣的花哨工具,因為它不能很快地運行。

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

根據這個navigator對象使用用戶代理標頭。

為什么要檢測用戶代理? 您是否要根據用戶代理運行不同的javascript? JQuery和或Mootools提供了一個抽象層來處理不同的瀏覽器JS。 此外,媒體查詢和其他API可以檢測視口大小,分辨率等內容,以促進內容適應。 如果要為不同的用戶代理提供完全不同的資源,則最好是服務器端內容協商。 在這種情況下,您可以使用Apache Mobile Filter(基於WURFL設備存儲庫)之類的東西從用戶代理字符串中檢測瀏覽器功能。

最后,如果要確保網絡/代理不會篡改您的請求,請在以下HTTP請求和響應標頭中使用以下指令:

Cache-Control: no-transform

這可以在使用JQuery的AJAX請求之前設置(或者只是在XmlHttpRequest對象上設置),也可以在Apache配置中設置響應。

你真的不應該檢測瀏覽器,而是檢測可用的功能,除非你的整個任務歸結為這一點 - 比如從某些統計目的檢測瀏覽器,或者某些瀏覽器成功報告支持某項功能的某些特定問題,但不是真的支持它或有缺陷(想想IE6的PNG支持)。 如果您不想手動編碼, Modernizr等可以幫助您進行功能檢測。

如果您仍然需要瀏覽器檢測,那么是的,您從客戶端JS獲得的機會多於從服務器獲得的機會。 在服務器上,您僅限於分析可由代理或客戶端本身剝離或損壞的User-Agent標頭,但在JS中,除了檢查用戶代理字符串之外,您還可以檢測環境中特定於瀏覽器的對象的存在或在實現某些功能時檢查特定於瀏覽器的怪癖,以准確檢測您真正使用的瀏覽器。但唯一的缺點是,用戶必須啟用JS。

作為一個簡單的示例,檢查您是否可以訪問ActiveXObject ,將告訴您,您在Internet Explorer中並檢查是否有可用的本機JSON.parse可以顯示它是標准模式下的版本7還是舊版本/兼容模式,不是重要的是用戶代理字符串被破壞了多少。

也許這可能有所幫助

<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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM