什么是浏览器/手机检测的可用解决方案

我正在为各种移动平台创建一个phonegap应用程序,我想知道当前最好的浏览器/手机检测解决方案是什么?

我应该使用服务器或客户端检测,还是可以通过媒体类型屏幕宽度使用css解决方案?

变化:

  • 06.03.2013 – 在WURFL章节中添加了一些评论

介绍 :

可用的解决方案很少,但我只会命名开源解决方案,至少解决方案主要与jQuery / jQuery Mobile一起使用。 另外要注意的是,这个话题有可能引发战争。 一方面,我们有一个服务器端检测的支持者与他们的社区维护数据库,另一方面,我们有客户端倡导者与他们的浏览器嗅探。

服务器端:

WURFL

WURFL(无线通用资源FiLe)创建于2002年,是一个流行的开源框架,用于解决移动Web开发人员和移动生态系统中其他利益相关者的设备碎片问题。 WURFL一直是并且仍然是移动开发人员采用的事实上的标准设备描述存储库。 WURFL是开源的(AGPL v3)和ScientiaMobile的商标。

好的:

非常详细的检测,你可能会得到更多的数据然后真的需要。

良好的平台支持,api可用于Java,PHP和.Net。

坏:

并不总是最新,严重依赖社区

在iPhone的情况下,无法知道iOS版本,因此媒体类型查询以检测像素比率。

仅用于非商业用途的费用,旧版本仍可免费用于商业用途,但他们只能使用更新到WURFL EULA更改的数据库。

  • 它可以在这里找到: http : //wurfl.sourceforge.net/apis.php

PHP示例:

getWURFLInfo(); if (isset($_GET['ua']) && trim($_GET['ua'])) { $ua = $_GET['ua']; $requestingDevice = $wurflManager->getDeviceForUserAgent($_GET['ua']); } else { $ua = $_SERVER['HTTP_USER_AGENT']; // This line detects the visiting device by looking at its HTTP Request ($_SERVER) $requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER); } ?>   WURFL PHP API Example   

WURFL XML INFO

  • VERSION: version; ?>

User Agent:
  • ID: id; ?>
  • Brand Name: getCapability('brand_name'); ?>
  • Model Name: getCapability('model_name'); ?>
  • Marketing Name: getCapability('marketing_name'); ?>
  • Preferred Markup: getCapability('preferred_markup'); ?>
  • Resolution Width: getCapability('resolution_width'); ?>
  • Resolution Height: getCapability('resolution_height'); ?>

Query WURFL by providing the user agent:

User Agent:

如果要自定义此代码,请更改wurfl_config_standard.php文件中的配置参数。


Modernizr – 服务器

Modernizr是了解用户浏览器function的好方法。 但是,您只能在浏览器本身上访问其API,这意味着您无法轻松了解服务器逻辑中的浏览器function。 modernizr-server库是一种将Modernizr浏览器数据引入服务器脚本环境的方法。

好的:

像WURFL非常详细的检测,但我们需要考虑到它是用不同的目的构建WURFL。

坏:

仅支持PHP,但有时这就足够了。

示例:

     Modernizr Server Example   $value) { print "
$feature: "; print_r($value); } ?>
  • 它可以在这里找到: https : //github.com/jamesgpearce/modernizr-server

客户端:

现代化

酷炫的新网络技术的优势非常有趣,直到你必须支持落后的浏览器。 无论浏览器是否支持某项function,Modernizr都可以让您轻松编写条件JavaScript和CSS来处理每种情况。 它非常适合轻松进行渐进增强。

好的:

仅客户端,服务器端组件不存在

对于一个12kb的javascript框架来说速度很快但仍然很大。 由于其模块化,它可以变小,取决于您的需求。

坏:

只能这么多,服务器端检测的信息少。

Modernizr本身是了解用户浏览器function的好方法。 但是,您只能在浏览器本身上访问其API,这意味着您无法轻松了解服务器逻辑中的浏览器function。

  • 它可以在这里找到: http : //modernizr.com/

示例:

      Modernizr Example       

基于JavaScript的浏览器嗅探

有争议的是,这可能(在学术上)是检测移动设备的最糟糕的方式,但它确实有其优点。

好的:

简单

坏:

从哪里开始

示例:

  

这可能不是最好的解决方案,但我在javascript中使用此function供个人使用。

顺便说一下@Gajotres感谢深刻而有用的信息。

 function mobilMi() { if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i)|| navigator.userAgent.match(/iPad/i) ){ return 1; } else return 0; } 

我有这样的代码来获取设备的os类型… $ test将是用户代理的字符串

  if (preg_match("/linux/i", $test) && preg_match("/android/i", $test)) { $device_type = 'Android'; } else if (preg_match("/windows phone/i", $test)){ $device_type = 'Windows Mobile'; } else if (preg_match("/windows nt/i", $test)){ $device_type = 'Windows'; } else if (preg_match("/linux/i", $test)){ $device_type = 'Linux'; } else if (preg_match("/macintosh/i", $test)){ $device_type = 'Macintosh'; } else if (preg_match("/iphone/i", $test)){ $device_type = 'iPhone'; } else if (preg_match("/ipad/i", $test)){ $device_type = 'iPad'; } else if (preg_match("/symbian/i", $test)){ $device_type = 'Symbian'; } else if (preg_match("/blackberry/i", $test)){ $device_type = 'Blackberry'; } else $device_type = 'None'; 

我想你需要知道模式并获得关键字。 使用WURFL有时候无法获得你想要的东西。