Intereting Posts
Функция JavaScript не обновляет списки на веб-странице при выпадающем элементе Сообщение об ошибке класса проверки подлинности Zend Framework Рекурсивная функция PHP для удаления всех дочерних узлов вызывает stackoverflow Могу ли я остановить CakePHP выборку всех строк для запроса? Фильтр между двумя датами MYSQL CodeIgniter Класс публикации Тип файла PDF не разрешен Приложение для написания на стене Facebook Получение всех узлов на уровне полного бинарного дерева, формат массива Должны ли мы использовать Pylons или PHP для нашего webapp? экспорт использования памяти из базы данных в csv в php CodeIgniter: пытается вызвать метод конструктора, чтобы проверить, зарегистрирован ли пользователь (вызывает бесконечный цикл перенаправления) java.lang.ClassNotFoundException: com.caucho.vfs.Path Как преобразовать строки в хэш-код html-кода? Как удалить одиночные символьные слова из строки с preg_replace Изображения php rss показывают изображения

Какие доступные решения для обнаружения браузера / мобильного телефона

Я создаю приложение для телефонных разговоров для различных мобильных платформ, и мне было интересно, какое настоящее решение лучше всего подходит для обнаружения браузера / мобильного телефона?

Должен ли я идти с обнаружением сервера или клиента или я могу использовать решение css через ширину экрана типов медиа?

Изменения:

  • 06.03.2013 – добавьте несколько комментариев в главу WURFL

Вступление :

Есть несколько доступных решений, но я буду называть только open-source, по крайней мере, решения, которые в основном используются с jQuery / jQuery Mobile. Также следует предупредить, что эта тема может начать войну. С одной стороны у нас есть сторонники обнаружения на стороне сервера с базами данных, поддерживаемыми сообществом, а с другой стороны у нас есть сторонники клиентской стороны с их обнюхиванием в браузере.

Серверная сторона:

WURFL

Созданная в 2002 году WURFL (Wireless Universal Resource FiLe), является популярной инфраструктурой с открытым исходным кодом для решения проблемы фрагментации устройства для мобильных веб-разработчиков и других заинтересованных сторон в мобильной экосистеме. WURFL был и остается де-факто стандартным репозитором описания устройств, принятым разработчиками мобильных устройств. WURFL является открытым исходным кодом (AGPL v3) и товарным знаком ScientiaMobile.

Хорошо :

Очень подробное обнаружение, вы, вероятно, получите больше данных, тогда это действительно необходимо.

Хорошая поддержка платформы, api доступны для Java, PHP и .Net.

Плохо :

Не всегда актуальная, сильная зависимость от сообщества

В случае iPhone нет возможности узнать версию iOS, поэтому запросы типа мультимедиа обнаруживают соотношение пикселей.

Плата только за некоммерческое использование, более старая версия по-прежнему бесплатна для коммерческого использования, но они могут использовать только обновленную базу данных до изменений WURFL EULA.

Пример PHP:

<?php // Include the configuration file include_once './inc/wurfl_config_standard.php'; $wurflInfo = $wurflManager->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); } ?> <html> <head> <title>WURFL PHP API Example</title> </head> <body> <h3>WURFL XML INFO</h3> <ul> <li><h4>VERSION: <?php echo $wurflInfo->version; ?> </h4></li> </ul> <div id="content"> User Agent: <b> <?php echo htmlspecialchars($ua); ?> </b> <ul> <li>ID: <?php echo $requestingDevice->id; ?> </li> <li>Brand Name: <?php echo $requestingDevice->getCapability('brand_name'); ?> </li> <li>Model Name: <?php echo $requestingDevice->getCapability('model_name'); ?> </li> <li>Marketing Name: <?php echo $requestingDevice->getCapability('marketing_name'); ?> </li> <li>Preferred Markup: <?php echo $requestingDevice->getCapability('preferred_markup'); ?> </li> <li>Resolution Width: <?php echo $requestingDevice->getCapability('resolution_width'); ?> </li> <li>Resolution Height: <?php echo $requestingDevice->getCapability('resolution_height'); ?> </li> </ul> <p><b>Query WURFL by providing the user agent:</b></p> <form method="get" action="index.php"> <div>User Agent: <input type="text" name="ua" size="100" value="<?php echo isset($_GET['ua'])? htmlspecialchars($_GET['ua']): ''; ?>" /> <input type="submit" /></div> </form> </div> </body> </html> 

Если вы хотите настроить этот код, измените параметры конфигурации внутри файла wurfl_config_standard.php .


Modernizr – Сервер

Modernizr – отличный способ узнать о возможностях браузера вашего пользователя. Тем не менее, вы можете получить доступ только к своему API в самом браузере, а это значит, что вы не можете легко узнать о возможностях браузера в своей логике сервера. Библиотека modernizr-сервера – это способ принести данные браузера Modernizr в среду сценариев сервера.

Хорошо :

Как и WURFL, очень подробное обнаружение, но мы должны принять во внимание, что он построен с другой целью WURFL.

Плохо :

Поддерживается только PHP, но иногда этого будет достаточно.

Пример :

 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Modernizr Server Example</title> </head> <body> <?php include('modernizr-server.php'); print 'The server knows:'; foreach($modernizr as $feature=>$value) { print "<br/> $feature: "; print_r($value); } ?> </body> </html> в <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Modernizr Server Example</title> </head> <body> <?php include('modernizr-server.php'); print 'The server knows:'; foreach($modernizr as $feature=>$value) { print "<br/> $feature: "; print_r($value); } ?> </body> </html> 

Сторона клиента:

Модернизатор

Преимущество прохладных новых веб-технологий – отличная забава, пока вам не придется поддерживать браузеры, которые отстают. Modernizr упрощает запись условного JavaScript и CSS для обработки каждой ситуации, независимо от того, поддерживает ли браузер какую-либо функцию или нет. Он идеально подходит для быстрого прогрессирования.

Хорошо :

Только клиентская сторона, компонент на стороне сервера не существует

Быстрый, но все еще большой для javascript framework с 12kb. Из-за своей модульности он может стать меньше, в зависимости от ваших потребностей.

Плохо :

Может делать только так много, меньше информации, чем обнаружение на стороне сервера.

Сам Modernizr – отличный способ узнать о возможностях браузера вашего пользователя. Тем не менее, вы можете получить доступ только к своему API в самом браузере, а это значит, что вы не можете легко узнать о возможностях браузера в своей логике сервера.

Пример :

  <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Modernizr Example</title> <script src="modernizr.min.js"></script> </head> <body> <script> if (Modernizr.canvas) { // supported } else { // no native canvas support available :( } </script> </body> </html> 

Обход браузера на основе JavaScript

Можно утверждать, что это может быть (академически) наихудшим способом обнаружения мобильных устройств, но у него есть свои достоинства.

Хорошо :

просто

Плохо :

С чего начать

Пример :

 <script type="text/javascript"> var agent = navigator.userAgent; var isWebkit = (agent.indexOf("AppleWebKit") > 0); var isIPad = (agent.indexOf("iPad") > 0); var isIOS = (agent.indexOf("iPhone") > 0 || agent.indexOf("iPod") > 0); var isAndroid = (agent.indexOf("Android") > 0); var isNewBlackBerry = (agent.indexOf("AppleWebKit") > 0 && agent.indexOf("BlackBerry") > 0); var isWebOS = (agent.indexOf("webOS") > 0); var isWindowsMobile = (agent.indexOf("IEMobile") > 0); var isSmallScreen = (screen.width < 767 || (isAndroid && screen.width < 1000)); var isUnknownMobile = (isWebkit && isSmallScreen); var isMobile = (isIOS || isAndroid || isNewBlackBerry || isWebOS || isWindowsMobile || isUnknownMobile); var isTablet = (isIPad || (isMobile && !isSmallScreen)); if ( isMobile && isSmallScreen && document.cookie.indexOf( "mobileFullSiteClicked=") < 0 ) mobileRedirect(); </script> 

Это может быть не лучшее решение, но я использую эту функцию для моего личного использования в javascript.

Кстати, @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 = '<font size="6">Windows Mobile</font>'; } 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 иногда не получает того, что вы хотите.