【问题标题】:Website Device Detection网站设备检测
【发布时间】:2013-03-08 16:46:11
【问题描述】:

我觉得这个问题之前一定已经在这里回答过了,但是我在任何地方都找不到。

网站能否检测到用户正在浏览的设备?例如,如果用户正在浏览应用程序的网站,它是否知道显示指向 Google PlayApple App Store 的链接,具体取决于他们使用的设备使用?

我认为$HTTP_USER_AGENT 不够用,因为 iPad 用户可能使用 Chrome,Android 用户可能使用 Firefox,等等。

我可以使用 PHP,当然还有 Javascript。

【问题讨论】:

  • 严格来说:不。但是对于实用建议,您应该使用搜索;)(我也尝试过)
  • 在 github 上浏览了一下,发现了这个项目:github.com/serbanghita/Mobile-Detect。也许你可以用这个。
  • @Tjoene 这看起来确实很聪明。我不知道它有多准确,但它看起来很有希望。谢谢!

标签: php web-deployment device-detection


【解决方案1】:

检测设备或网络浏览器的唯一方法是用户代理字符串,每个网络浏览器都必须根据 HTTP 1.1 协议提供用户代理。用户代理字符串可以包含多个产品令牌。按照惯例,产品令牌是按照它们对识别应用程序的重要性的顺序列出的。

对于基于 Mozilla 的浏览器,用户代理字符串应遵循以下格式:

 MozillaProductToken (MozillaComment) GeckoProductToken *
    (VendorProductToken|VendorComment)

嵌入 Gecko 布局引擎的应用程序应具有遵循以下格式的用户代理字符串:

 ApplicationProductToken (ApplicationComment) GeckoProductToken *
    (VendorProductToken|VendorComment)

地点:

 ProductToken     :      Mozilla/ MozillaVersion
 Version          :      Major . Minor
 Comment          :      ( Platform; Security; OS-or-CPU;
                                 Localization information; 
                                 GeckoVersion)*[; Optional Other Comments] )
 Platform         :      Windows, Linux, Mac etc.
 Security         :      N for no security; 
                         U for strong security; 
                         I for weak security
 OS-or-CPU        :      Windows Version/MacOS 
 GeckoVersion     :      String starting with "rv:" followed 
                         by the Gecko version
 GeckoProductToken:      Gecko/GeckoDate
 GeckoDate        :      Date in the format YYYYMMDD

例子

Mozilla 发布

     Mozilla/5.001 (windows; U; NT4.0; en-US; rv:1.0) Gecko/25250101

基于与上述浏览器相同的代码库的品牌发布

     Mozilla/5.001 (Macintosh; N; PPC; ja; rv:1.0) Gecko/25250101 
       MegaCorpBrowser/1.0 (MegaCorp, Inc.)

重新命名的版本

      Mozilla/9.876 (X11; U; Linux 2.2.12-20 i686, en; rv:2.0) Gecko/
        25250101 Netscape/5.432b1 (C-MindSpring)

基于 Gecko 的浏览器

      TinyBrowser/2.0 (TinyBrowser Comment; rv:1.9.1a2pre) Gecko/20201231

歌剧

用户字符串规范:

  Opera/Version (OS-or-CPU; Encryption; Language)

他们使用 WebKit 作为其渲染引擎,但使用不同的 JavaScript 引擎。对于 Chrome 的初始 beta 版本 0.2,用户代理字符串包含来自 WebKit 的所有信息以及 Chrome 版本的额外部分。格式如下:

  Mozilla/5.0 (Platform; Encryption; OS-or-CPU; Language) 
  AppleWebKit/AppleWebKitVersion (KHTML, like Gecko) Chrome/
  ChromeVersion Safari/SafariVersion

  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, 
  like Gecko) Chrome/0.2.149.29 Safari/525.13

征服者

Konqueror 是与 KDE Linux 桌面环境捆绑在一起的浏览器,它基于 KHTML 开源渲染引擎。尽管仅在 Linux 上可用,但 Konqueror 拥有活跃的用户群。为获得最佳兼容性,Konqueror 选择在 IE 之后格式化其用户代理字符串,如下所示:

 Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.0 (like Gecko)

WebKit

2003 年,Apple 宣布将发布自己的网络浏览器,称为 Safari。称为 WebKit 的 Safari 渲染引擎最初是基于 Linux 的 Konqueror Web 浏览器中使用的 KHTML 渲染引擎的一个分支。但是,您如何确保浏览器不会被热门网站拒之门外?答案是,将足够的信息放入用户代理字符串中,以使网站相信该浏览器与另一个流行的浏览器兼容。这导致了具有以下格式的用户代理字符串:

 Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/
 124 (KHTML, like Gecko) Safari/125.1

手机和平板电脑指标

UA 字符串的平台部分指示 Firefox 是在手机大小的设备还是平板设备上运行。当 Firefox 在具有手机外形的设备上运行时,就会有 Mobile; UA 字符串的平台部分中的令牌。例如:

 Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0

 Mozilla/5.0 (Android; Tablet; rv:13.0) Gecko/13.0 Firefox/13.0

但是,如果您使用 UA 嗅探将内容定位到设备外形规格,请在手机外形规格中查找 Mobi(包括使用“Mobi”的 Opera Mobile),并且不要假设“Android”之间有任何关联和设备外形尺寸。

安卓

 Phone    :     Mozilla/5.0 (Android; Mobile; rv:13.0) Gecko/13.0 Firefox/13.0
 Tablet   :     Mozilla/5.0 (Android; Tablet; rv:13.0) Gecko/13.0 Firefox/13.0

火狐操作系统

 Phone    :     Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0

【讨论】:

    【解决方案2】:

    您可以同时使用服务器端和客户端技术来智能猜测访问者正在使用哪个设备:

    • PHP 可以解析用户代理或在已知设备的数据库中查找它
    • Javascript 可以检测浏览器的许多 API 和功能,让您对设备功能有一个很好的了解。

    虽然没有真正的保证(您基本上相信浏览器 选择 告诉您的任何信息),但您可以通过以下两个示例了解用户设备:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多