Вы не можете избежать их. Посетите любое место, где собираются технические гики, и вы найдете множество устройств Apple. Неважно, будет ли это конференция Microsoft или встреча Google — iPhone вездесущ. (Сообщалось, что 10% сотрудников Microsoft владеют устройствами, к большому отвращению высшего руководства!) IPad был выпущен недавно, и я ожидаю, что он станет почти таким же популярным.
Apple, агенты
Устройства, которые запрашивают контент с вашего сайта (обычно), передают строку агента пользователя. Он содержит такую информацию, как имя, ОС, версия браузера и механизм рендеринга. Гаджеты Apple передают следующие пользовательские агенты, хотя вы можете обнаружить незначительные различия в номерах версий:
iPhone:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
Фен:
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
IPAD:
Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10
Выяснение Apple
Строка агента пользователя может быть проанализирована на сервере или клиенте, чтобы определить, какое устройство обращается к вашему сайту. Тем не менее, помните, что браузер нюхает воняет : лучше создать один веб-сайт, который работает на разных браузерах, чем поддерживать несколько разных версий. Однако вы можете использовать этот код для сопоставления статистики или создания альтернативного представления вашего веб-приложения, соответствующего интерфейсу iPhone.
Без лишних слов, вот код обнаружения JavaScript:
// Apple detection object var Apple = {}; Apple.UA = navigator.userAgent; Apple.Device = false; Apple.Types = ["iPhone", "iPod", "iPad"]; for (var d = 0; d < Apple.Types.length; d++) { var t = Apple.Types[d]; Apple[t] = !!Apple.UA.match(new RegExp(t, "i")); Apple.Device = Apple.Device || Apple[t]; } // is this an Apple device? alert( "Apple device? " + Apple.Device + "niPhone? " + Apple.iPhone + "niPod? " + Apple.iPod + "niPad? " + Apple.iPad );
,// Apple detection object var Apple = {}; Apple.UA = navigator.userAgent; Apple.Device = false; Apple.Types = ["iPhone", "iPod", "iPad"]; for (var d = 0; d < Apple.Types.length; d++) { var t = Apple.Types[d]; Apple[t] = !!Apple.UA.match(new RegExp(t, "i")); Apple.Device = Apple.Device || Apple[t]; } // is this an Apple device? alert( "Apple device? " + Apple.Device + "niPhone? " + Apple.iPhone + "niPod? " + Apple.iPod + "niPad? " + Apple.iPad );
Подобный код может быть разработан в PHP для обнаружения на стороне сервера:
// Apple detection array $Apple = array(); $Apple['UA'] = $_SERVER['HTTP_USER_AGENT']; $Apple['Device'] = false; $Apple['Types'] = array('iPhone', 'iPod', 'iPad'); foreach ($Apple['Types'] as $d => $t) { $Apple[$t] = (strpos($Apple['UA'], $t) !== false); $Apple['Device'] |= $Apple[$t]; } // is this an Apple device? echo "<p>Apple device? ", ($Apple['Device'] ? 'true' : 'false'), "</p>n<p>iPhone? ", ($Apple['iPhone'] ? 'true' : 'false'), "</p>n<p>iPod? ", ($Apple['iPod'] ? 'true' : 'false'), "</p>n<p>iPad? ", ($Apple['iPad'] ? 'true' : 'false'), '</p>';
Кроме того, вы можете использовать файл Apache .htaccess для перенаправления на специфическую для Apple версию вашего сайта по другому URL-адресу или субдомену, например
RewriteCond %{HTTP_USER_AGENT} ^.*(iP.*$ RewriteRule ^(.*)$ http://apple.site.com [R=301]
Полезные вещи, но остается важный вопрос: должны ли мы разрабатывать отдельные версии наших веб-сайтов для этих популярных устройств?