Php 使用javascript检测浏览器/版本与服务器端检测?

Php 使用javascript检测浏览器/版本与服务器端检测?,php,javascript,html,apache,http,Php,Javascript,Html,Apache,Http,我们正在构建一个bookmarklet,我们想知道,与在服务器端使用代理相比,使用JavaScript在客户端检测浏览器和版本号是否更准确 我们会将检测结果推送到主请求的服务器 问题是,这种方法能否更好、更准确?或者两者都会犯同样的错误,JavaScript本身会从用户代理进行计算(可以通过插件/代理进行更改) 重要 请不要忘记,我们正在构建一个bookmarklet,因此我们无法加载像Modernizer和JQuery这样的奇特工具,因为它的运行速度不快。也许这会有所帮助 <div id

我们正在构建一个bookmarklet,我们想知道,与在服务器端使用代理相比,使用JavaScript在客户端检测浏览器和版本号是否更准确

我们会将检测结果推送到主请求的服务器

问题是,这种方法能否更好、更准确?或者两者都会犯同样的错误,JavaScript本身会从用户代理进行计算(可以通过插件/代理进行更改)

重要

请不要忘记,我们正在构建一个bookmarklet,因此我们无法加载像Modernizer和JQuery这样的奇特工具,因为它的运行速度不快。

也许这会有所帮助

<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>

txt=“浏览器代码名:”+navigator.appCodeName+“

”; txt+=“浏览器名称:”+navigator.appName+“

”; txt+=“浏览器版本:”+navigator.appVersion+“

”; txt+=“Cookies已启用:”+navigator.cookieEnabled+“

”; txt+=“平台:“+navigator.Platform+”

”; txt+=“用户代理标题:“+navigator.userAgent+”

”; document.getElementById(“示例”).innerHTML=txt;

参考资料:

我可能错了,但我认为JS也使用用户代理。到目前为止,我还没有看到JS浏览器检测代码不从用户代理进行计算。如果我错了,请纠正我。如果这有助于您尝试JQuery
$.support
属性来检测/支持您需要的特定功能,而不是依赖于浏览器名称和版本。很容易伪造你的用户代理


根据
导航器
对象使用用户代理标题。

为什么要检测用户代理?是否要根据用户代理运行不同的javascript?JQuery和/或Mootools提供了一个抽象层,负责处理不同的浏览器JS。此外,媒体查询和其他API可以检测视口大小、分辨率等,以方便内容自适应。如果您想为不同的用户代理提供完全不同的资源,那么服务器端内容协商是更好的选择。在这种情况下,您可以使用类似ApacheMobileFilter(基于WURFL设备存储库构建)的东西从用户代理字符串中检测浏览器功能

最后,如果要确保网络/代理不会篡改您的请求,请在以下HTTP请求和响应标头中使用以下指令:

Cache-Control: no-transform

这可以在使用JQuery的AJAX请求之前设置(或者简单地在XmlHttpRequest对象上设置),也可以在Apache配置中设置响应。

您确实不应该检测浏览器,而应该检测可用功能,除非你的整个任务都归结为这一点——比如从某些统计目的检测浏览器,或者对于某些成功报告支持某项功能但实际上不支持该功能或存在缺陷的浏览器来说,存在某些特定问题(想想IE6对PNG的支持)。如果你不想手工编码的话,这类功能可以帮助你进行特征检测

如果您仍然需要浏览器检测,那么是的,客户端JS比服务器JS提供的机会更多。在服务器上,您仅限于分析可以被代理或客户端本身剥离或损坏的用户代理头,但在JS中,除了检查用户代理字符串,您还可以检测环境中是否存在特定于浏览器的对象,或者在某些功能的实现中检查特定于浏览器的怪癖,以准确检测您真正使用的浏览器。不过,唯一的缺点是,用户自然必须启用JS


作为一个简单的例子,检查您是否有权访问
ActiveXObject
,将告诉您在Internet Explorer中,并检查是否有本机的
JSON。可用的parse
可以显示它是标准模式下的版本7,还是更旧/兼容模式下的版本7,无论有多少用户代理字符串被损坏。

除了
navigator.appVersion
navigator.userAgent
,其余的都完全不可用(例如,Chrome为
navigator.appName
)返回“Netscape”)
jQuery。支持
不要使用userAgent,但是,如果依赖于使用userAgent,则可以使用jQuery.browser和jQuery.browser.version。两者都使用
userAgent
。。。在我看来,没有一个特征检测机构回答了这个合理的问题。关于一些行业标准工具集中的最佳impl的好文章: