【问题标题】:User agent string for "[browser version] and later"“[浏览器版本] 及更高版本”的用户代理字符串
【发布时间】:2012-08-20 15:12:10
【问题描述】:

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

【问题讨论】:

  • tons of php code 与包含动画的 css 文件到底有什么关系?这可能会影响答案。
  • 诚然,我本可以更清楚地说明这一点。
    我在 PHP 方面的经验并不丰富,到目前为止,我知道如何真正重新创建这种效果的唯一方法是让为每个浏览器版本加载单独的条件样式表。我必须为每个浏览器的每个新版本添加一个新评论。显然,这不是一个可行的解决方案。
  • 我相信我会选择 Modernizr,但知道如何使用 PHP 来完成这一点仍然很有趣。
  • 请注意,浏览器只会忽略样式表中他们不理解的内容,因此除非您为不同的浏览器(css​​ 与 javascript)提供不同的解决方案,否则您可以只在 main 中包含动画样式表。
  • 这就是我想要做的。我正在使用 CanIUse 来找出从哪个浏览器版本开始支持哪些功能,并基于此提供回退。

标签: php http user-agent


【解决方案1】:

这是一种解决方案,但您必须不时更新用户代理字符串的解析器以在其中包含更改。 使用代理字符串没有公认的标准,因此通常解析用户代理字符串非常困难,并且通常归结为查找表。

一种更面向未来的方法是使用例如Modernizr 来检测客户端对 CSS 动画的支持,然后根据结果加载样式表。这样一来,您就不必担心将来某些浏览器开发人员想更改用户代理字符串的(结构)。

【讨论】:

  • +1 我不确定 css 动画与大量 php 代码有何关系,但 Modernizr.load 绝对是要走的路:modernizr.com/docs
  • +1。使用 Modernizr。这是到目前为止解决您问题的最佳方法。
【解决方案2】:

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

但是...如果您使用 get_browser(),请注意它不是解决问题的好方法。

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

这样的缺点很明显:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    我最近在Dino Esposito's MSDN article on Mobile Site Development 中读到了有关 DDR 的信息。他对 DDR 的功能和性质有出色的论述。

    我知道您正在使用 PHP,但连接/查询 DDR 应该与语言无关。

    只是一个想法,希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2020-07-18
      • 2018-09-14
      • 2011-10-06
      相关资源
      最近更新 更多