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

我们正在开始走下移动浏览器支持企业电子商务webapp(基于Java / Servlet)的path。 当然有很多决定要做,但在我看来,基石是能够可靠地检测移动浏览器,并作出相应的内容决定。 有没有一个标准的方式来(快速)基于http请求做出这个决定,理想情况下收集有关给定的浏览器和设备的请求(屏幕大小,HTMLfunction等)的更多信息。

我也很感激任何补充的信息,这些信息可能会从那些走上现有的大型企业Web应用程序并从开发方面构build移动浏览器支持的人那里得到使用。

我当然明白请求头和标准用户代理数据库的信息是一个很大的帮助。 对于那些正在讨论“其他”请求头部属性的人来说,如果你可以包含类似的标准化名称/资源的值,这将是一个很大的帮助。

几个用户已经提出了一些解决scheme,这些解决scheme涉及到通过networking进行呼叫的一些Web服务来进行检测。 虽然我确信这是有效的,但对于企业电子商务网站来说这不是一个好的解决scheme,原因有两个:1)速度。 每次向第三方发送页面请求的电话呼叫都会带来巨大的性能影响。 2)依赖/合法。 我们会将我们的网站响应时间和关键function绑定到他们的服务上,这在法律和风险方面是非常可怕的。

标准的方式不是检查用户代理吗? 以下是可用于检测移动浏览器的用户代理数据库 。

@大卫的回答提到使用WURFL – 这可能是你最好的select。 然而,预先警告,成功率通常在60%左右(来自我和其他人的经验)。 随着运营商不断地改变UA和存在的设备configuration文件的数量(60,000+),没有防弹的方法来获得所有你想要的数据。

在严重依赖设备数据库之前,请稍等一下。 我会尽量让用户的select打开,让他们改变会话选项,以防我猜错了。

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

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

理想情况下,应根据媒体types应用特定样式,或者基于除用户代理之外的其他头部发送不同的答案,例如Accept头,它告诉浏览器喜欢哪种types的内容。

现在,通过浏览器嗅探function可以编写一个能够与iPhone和Opera协同工作的网站 – 但Google即将推出Android,现在还有很多其他的手机在不久的将来会拥有接近iPhone的浏览器function如果开发一个移动网站,从头开始不支持这些设备,那将是一种浪费。

经过几天寻找正确的方式来检测移动设备,我决定保持简单[愚蠢],我会把我的索引页上的“移动设备网站”button….只有一个点击!

这篇文章 (及其后续 )似乎很好。

检测移动浏览器 – 各种编程语言的片段。

以下轻量级的Apacheconfigurationfunction相当出色,如果用户喜欢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上的更多背景;

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

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

具有讽刺意味的是,事实certificate,我并没有最终使用这个代码,因为我们决定为移动和非移动用户提供特定的URL,但是当我testing它的时候它确实有效。

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

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

然后,从浏览器网站链接到移动网站,注册他们的“投票”和他们的用户代理。 你可以build立你自己的可靠的客户谁想要的移动网站列表。 使用这个已婚的规格在这些移动设备的屏幕大小,你可以build立一个相当不错的逻辑满意的用户体验。 我永远不会发布到networking来源的东西这样的基本。

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

我看不到它张贴在这里,但另一个选项,我正在调查目前是www.detectmobilebrowser.com

最简单的方法是创build一个具有与移动浏览器相关的常规标签的数组。 至less大多数移动用户代理必须具有移动,迷你,诺基亚,Java ME,Android,iPhone,移动操作系统等字。如果任何与用户代理匹配,使用php strpos,在页面顶部打印一个移动button。 让用户select。 我喜欢整个网站,因为我的手机浏览器给了我相同的经验,除了我需要放大或滚动大部分时间。

你将不得不用先前定义的列表来检查用户代理string, 就像这样

你可以使用web服务来检测手机浏览,如handsetdetection.com。

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

当然,几年前,你可以search某些string,并猜测它是诺基亚还是其他的东西,但是现在有这么多的电话,而那么多的假装是不需要更复杂的东西。

我在链接文本中find了一个很棒的网站,它基于MTV在所有移动网站上使用的解决scheme。 这是非常好的,因为它有一个设备独立的标记语言,但更重要的是,他们提供了isMobileDevice()的web服务调用。

只要看手册然后“如何运作”。

我一直在使用它为我的客户网站,还没有find一个手机浏览器,它不能准确检测。 完全致盲!

只需在移动networking上通过设备和function检测即可使用以下内容:

  1. 使用设备和function检测来改善移动networking上的用户体验
  2. 设备检测简介
  3. 移动网站devise的方法
    1. 没做什么
    2. 提供一个通用的移动网站
    3. devise与移动和适应的思想
  4. 内容适应和设备分组策略
    1. 设备分组
    2. 内容适应
  5. 首先最大限度地减less适应需求
  6. 设备检测的常用方法
    1. 服务器端适应
    2. 客户端适应
    3. 服务器端用户代理(UA)和标题查找
    4. 服务器端UAstring与设备数据库查找相结合
    5. 服务器端用户代理configuration文件(UAProf)检测
    6. 基于JavaScript技术的检测
    7. CSS媒体types
    8. CSS媒体查询
  7. 其他最佳做法
    1. redirect+手动链接
    2. 登陆页面+手动链接
  8. 可下载的示例页面

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

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

或Modernizer来检测浏览器function