2012-06-07 147 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版本而不是,不管多少用户代理字符串被损坏。