"[browser version] and later"的用户代理字符串



我试图通过指定如果HTTP_USER_AGENT字符串对应于[browser versionx]或更高版本,则应加载包含CSS动画的远程样式表来避免大量的PHP代码。例如,知道Chrome 19及更新版本支持CSS动画,代码就会检测Chrome的版本是否大于19,并加载适当的样式表
使用PHP是否可行?

这是一个解决方案,但您必须不时更新用户代理字符串的解析器,以便在其中包含更改。对于使用代理字符串,目前还没有达成一致的标准,因此通常解析用户代理字符串非常困难,通常归结为查找表。

一种更经得起未来考验的方法是使用例如Modernizr在客户端检测CSS动画的支持,然后根据结果加载样式表。这样一来,如果某个浏览器开发人员将来想要更改用户代理字符串(的结构),您就不在乎了。

如果必须使用PHP,那么有一个内置函数get_browser()可以满足您的需要。

然而。。。如果您使用get_browser(),请注意它是解决问题的糟糕方法。

为了使用此功能,您必须有一个最新的browsecap.ini文件,它基本上是一个文本文件,定义了所有浏览器和已发布的每个版本的功能。

这样做的缺点是显而易见的:

  • 首先,您必须找到并安装browsecap.ini的最新副本
  • 每次发布新浏览器时,你都必须更新它(而且新版本经常出现,所以这是一项相当大的任务)
  • 它可能不包括您想要检测的所有功能
  • 如果用户屏蔽其用户代理字符串,它将断开

出于所有这些原因,我强烈建议不要使用get_browser(),或者任何基于PHP或服务器端的解决方案。

相反,正如其他人所说,您应该使用Modernizr库进行调查。这是一个Javascript库,您可以在网站上安装它,在浏览器中进行功能检测。它永远不会过时,因为它专门关注是否支持这些功能,所以它不在乎实际的浏览器是什么

您可能希望考虑使用设备描述存储库(DDR)。这是一个应用程序或Web服务,您可以传入用户代理字符串并获取该用户代理的已知功能列表。

这样做的好处是,随着新的用户代理的出现,您不必不断更新自己的代码。

我最近在Dino Esposito的MSDN关于移动网站开发的文章中读到了DDR。他对DDR的功能和性质有着出色的总结。

我知道你在做PHP,但是连接/查询DDR应该是独立于语言的。

只是想一想,希望这能有所帮助。

最新更新