基于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_PROFILE
, HTTP_ACCEPT
和HTTP_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检测即可使用以下内容:
- 使用设备和function检测来改善移动networking上的用户体验
- 设备检测简介
- 移动网站devise的方法
- 没做什么
- 提供一个通用的移动网站
- devise与移动和适应的思想
- 内容适应和设备分组策略
- 设备分组
- 内容适应
- 首先最大限度地减less适应需求
- 设备检测的常用方法
- 服务器端适应
- 客户端适应
- 服务器端用户代理(UA)和标题查找
- 服务器端UAstring与设备数据库查找相结合
- 服务器端用户代理configuration文件(UAProf)检测
- 基于JavaScript技术的检测
- CSS媒体types
- CSS媒体查询
- 其他最佳做法
- redirect+手动链接
- 登陆页面+手动链接
- 可下载的示例页面
您可以使用WURFL API来检测设备types
http://wurfl.sourceforge.net/wurfl_schema.php
或Modernizer来检测浏览器function