基于http请求检测Web应用程序中的移动浏览器的标准方法

时间:2008-09-26 22:04:23

标签: browser mobile enterprise web-applications

我们开始走上移动浏览器支持企业电子商务webapp(基于Java / Servlet)的道路。当然,有很多决定要做,但在我看来,基石是能够可靠地检测移动浏览器,并相应地返回要返回的内容。有没有一种标准的方法可以(快速)根据http请求做出这个决定,并且理想地收集有关给定请求的给定浏览器和设备的更多信息(屏幕大小,html功能等?)。

我还要感谢任何从使用现有大型企业Web应用程序并从开发方面构建移动浏览器支持的人那里获得的任何补充信息。

[edit]我当然理解请求标头和标准用户代理数据库的信息是一个很大的帮助。对于那些谈论“其他”请求标题属性的人,如果您可以包含类似的标准化名称/资源值,这将是一个很大的帮助。

[编辑]一些用户提出了一些解决方案,这些解决方案涉及通过线路调用某些将进行检测的Web服务。虽然我确信这是有效的,但对于企业电子商务网站来说,这不是一个好的解决方案,原因有两个:1)速度。针对第三方的每个页面请求通过电话进行的呼叫将产生巨大的性能影响。 2)依赖/合法。我们将网站的响应时间和关键功能与他们的服务联系起来,这在法律和风险方面都很糟糕。

19 个答案:

答案 0 :(得分:42)

标准方法不是检查用户代理吗?这是您可以用来检测移动浏览器的database of user agents

答案 1 :(得分:20)

@ David的回答提到使用WURFL - 这可能是你最好的选择。但是,预先警告,成功率通常在60%左右(来自我和其他人的经验)。由于运营商不断更改UA以及存在的设备配置文件数量(60,000 +?),因此无法获得所需的所有正确数据。

在严重依赖设备数据库之前,只需要一点警告。我会尝试保持用户的选项打开,允许他们更改会话选项,以防我猜错了。

答案 2 :(得分:8)

您可以使用 Modernizer 来检测浏览器功能

答案 3 :(得分:6)

虽然您可以通过它的用户代理检测到移动浏览器,但PC平台上的浏览器大战已经表明,嗅探用户代理并不是一件好事。

理想情况下应该根据媒体类型应用特定样式,或者应该根据用户代理之外的标头发送不同的答案 - 例如Accept-header,它告诉哪种内容浏览器更喜欢。

现在,通过浏览器嗅探来编写一个可以与iPhone配合使用的网站,以及通过浏览器嗅探来编写Opera的网站可能已经足够了 - 但谷歌Android现在已经到来了,而且还有许多其他手机将具有接近iPhone的浏览器功能。在不久的将来,开发一个不支持这些设备的移动网站将是一件荒谬的事情。

答案 4 :(得分:5)

经过几天寻找正确检测移动设备的方法后,我决定保持简单[愚蠢],我将在我的索引页面上放置一个“移动设备网站”按钮....它只需点击一下远!!

答案 5 :(得分:4)

This article(及其follow-up)似乎很不错。

答案 6 :(得分:4)

Detect Mobile Browsers - 各种编程语言的片段。

答案 7 :(得分:3)

以下轻量级Apache配置做得非常好,如果他们更喜欢PC版本,则会记住用户偏好

<VirtualHost (your-address-binding)>   

  (your-virtual-host-configuration)       

  RewriteEngine On     
  RewriteCond %{QUERY_STRING} !ui=pc
  RewriteCond %{HTTP_COOKIE} !ui=pc
  RewriteCond %{HTTP_USER_AGENT} "^.*(iphone|ipod|ipad|android|symbian|nokia|blackberry| rim |opera mini|opera mobi|windows ce|windows phone|up\.browser|netfront|palm-|palm os|pre\/|palmsource|avantogo|webos|hiptop|iris|kddi|kindle|lg-|lge|mot-|motorola|nintendo ds|nitro|playstation portable|samsung|sanyo|sprint|sonyericsson|symbian).*$" [NC,OR]

  RewriteCond %{HTTP_USER_AGENT} "^(alcatel|audiovox|bird|coral|cricket|docomo|edl|huawei|htc|gt-|lava|lct|lg|lynx|mobile|lenovo|maui|micromax|mot|myphone|nec|nexian|nook|pantech|pg|polaris|ppc|sch|sec|spice|tianyu|ustarcom|utstarcom|videocon|vodafone|winwap|zte).*$" [NC] 

  RewriteRule /(.*) http://bemoko.com/$1 [L]

  RewriteCond %{QUERY_STRING} "ui=pc"
  RewriteRule ^/ - [CO=ui:pc:(your-cookie-domain):86400:/]
  RewriteCond %{QUERY_STRING} "ui=default"
  RewriteRule ^/ - [CO=ui:default:(your-cookie-domain):86400:/]
</VirtualHost>

有关此问题的更多背景信息@ http://bemoko.com/training.team/help/team/pc-to-mobile-redirect

答案 8 :(得分:2)

我建议一个基于uaprof和用户代理的免费检测系统: http://www.mobilemultimedia.be UAprof应该是可用时检测的主键,因为通常有多个用户代理用于相同的uaprof。如果你想自己管理这个,你应该去Wurfl,因为你可以自己下载整个数据库并在本地管理它。

答案 9 :(得分:2)

当我最近遇到类似需求时,我发现this code使用HTTP_X_WAP_PROFILEHTTP_ACCEPTHTTP_USER_AGENT将浏览器标识为移动或非移动。它是PHP,但可以很容易地转换成你需要的任何东西(我在VBScript中为经典ASP实现它)。

具有讽刺意味的是,事实证明我并没有最终使用这些代码,因为我们决定为移动和非移动用户提供特定的URL,但是当我测试它时它确实有用......

答案 10 :(得分:1)

您将从请求标头中获取大部分信息,如浏览器,设备,接受的语言,接受的格式等。上面提到的用户代理是请求标头的一部分。

答案 11 :(得分:1)

最简单的方法是使用与移动浏览器关联的常规标记创建数组。至少大多数移动用户代理必须有单词mobile,mini,nokia,java ME,android,iphone,mobile OS等。如果有任何与用户代理匹配,使用php strpos,在页面顶部打印移动按钮。让用户选择。我喜欢完整的网站我的移动浏览器给了我相同的体验,除了我需要缩放或滚动大部分时间。

答案 12 :(得分:1)

好的,这是一个非常简单的答案 - 如何让用户决定?登录您的ap时,请提供指向移动网站的链接。在移动网站上,提供“返回主站点”的链接 - 在您的移动设备上试用www.fazolis.com - 他们做得很好。

然后,在浏览器站点的移动站点链接上,注册他们的“投票”及其用户代理。您可以构建自己可靠的 YOUR 客户列表,这些客户需要移动网站。使用这与这些移动设备的屏幕尺寸规格相结合,您可以构建一些非常好的逻辑,以获得满意的用户体验。我绝不会向网络资源发布与此类似的基本信息。

哦,在你的“移动网站”上 - 如果你在语言上写得很好,那么你应该能够为移动设备和浏览器提供一个站点,而不必写两个单独的页面集。只需考虑一下 - 这值得额外的思考和努力以节省时间。

答案 13 :(得分:1)

我在这里看不到它,但我目前正在研究的另一个选项是www.detectmobilebrowser.com

答案 14 :(得分:0)

您可以使用WURFL API来检测设备类型

http://wurfl.sourceforge.net/wurfl_schema.php

Modernizer检测浏览器功能

答案 15 :(得分:0)

使用以下内容浏览Device and feature detection on the mobile web

  1. 使用设备和功能检测来改善移动网络上的用户体验
  2. 设备检测简介
  3. 移动网站设计方法
    1. 什么都不做
    2. 提供通用移动网站
    3. 设计移动和适应性
  4. 内容适应和设备分组策略
    1. 设备分组
    2. 内容改编
  5. 首先尽量减少适应的需要
  6. 设备检测的常用方法
    1. 服务器端适应
    2. 客户端改编
    3. 服务器端用户代理(UA)和标头查找
    4. 服务器端UA字符串与设备数据库查找相结合
    5. 服务器端用户代理配置文件(UAProf)检测
    6. 基于JavaScript技术的检测
    7. CSS媒体类型
    8. CSS媒体查询
  7. 其他最佳做法
    1. 重定向+手动链接
    2. 目标网页+手动链接
  8. 可下载的样本页

答案 16 :(得分:0)

事实是,仅依靠useragent并不足以检测移动浏览器。

当然,几年前你可以搜索某些字符串并猜测它是诺基亚还是什么东西,但是现在有那么多手机,还有很多人假装是那些不那么复杂的东西需要。

我在link text找到了一个很棒的网站,它基于MTV用于所有移动网站的相同解决方案。它真的很好,因为它有一个独立于设备的标记语言,但更重要的是它们为isMobileDevice()提供web服务调用。

只需查看手册,然后“工作原理”。

我一直在将它用于我的客户网站,并且还没有找到它无法准确检测到的移动浏览器。完全致盲!

答案 17 :(得分:0)

您可以使用网络服务来检测mobiledetection.com等移动浏览。

答案 18 :(得分:0)

您必须使用先前定义的列表like this one

检查用户代理字符串