есть ли скрипт для обнаружения, если посетитель использует iphone (независимо от его браузера, iPhone Safari, iPhone для Opera или т. д.)?
Затем выключит некоторые из моих JavaScript.
Благодаря…
поиск в сети есть два общих способа достижения этого. Мой любимый, хотя и в PHP, просто так чист? Вау. : D
В PHP вы можете написать
<?php function isIphone($user_agent=NULL) { if(!isset($user_agent)) { $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; } return (strpos($user_agent, 'iPhone') !== FALSE); } if(isIphone()) { header('Location: http://www.yourwebsite.com/phone'); exit(); } // ...THE REST OF YOUR CODE HERE ?>
и в javascript вы можете написать
var agent = navigator.userAgent; var isIphone = ((agent.indexOf('iPhone') != -1) || (agent.indexOf('iPod') != -1)) ; if (isIphone) { window.location.href = 'http://www.yourwebsite.com/phone'; }
Надеюсь, это поможет.
PK
Обычная мудрость заключается в том, что устройства iOS имеют пользовательский агент для Safari и пользовательский агент для UIWebView. Это предположение неверно, поскольку приложения iOS могут и настраивать свой пользовательский агент. Главным нарушителем здесь является Facebook.
Сравните эти строки пользовательского агента с устройствами iOS:
# iOS Safari iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3 iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3 # UIWebView iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176 iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117 # Facebook UIWebView iPad: Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1.1;FBBV/4110.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0] iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; ru_RU) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1;FBBV/4100.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; tablet;FBLC/en_US]
Обратите внимание, что на iPad пользовательская строка пользовательского интерфейса Facebook UIWebView содержит «iPhone».
Старый способ идентификации iPhone в JavaScript:
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
Если вы собираетесь использовать этот подход для обнаружения iPhone, вы получите IS_IPHONE, являющийся истинным, если пользователь придет из Facebook на iPad. Это может создать нечетное поведение!
Правильный способ идентификации iPhone в JavaScript:
IS_IPAD = navigator.userAgent.match(/iPad/i) != null; IS_IPHONE = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null); if (IS_IPAD) { IS_IPHONE = false; }
Мы объявляем IS_IPHONE ложным на iPad, чтобы покрыть причудливый пользовательский агент Facebook UIWebView iPad. Это один из примеров ненадежности пользовательского агента. Чем больше приложений для iOS, которые настраивают свой пользовательский агент, тем больше проблем будет у пользователей. Если вы можете избежать нюхания агента пользователя (подсказка: CSS-запросы), сделайте это.
<script language="javascript" type="text/javascript"> //This redirects iPhone users to the iPhone-friendly site if ((navigator.userAgent.indexOf('iPhone') != -1) || (navigator.userAgent.indexOf('iPod') != -1)) { document.location = "http://i.yoursite.com"; }
Этот скрипт проверяет iPhone или iPod в userAgent, а затем выполняет действие. Попробуй.
//Detect special conditions devices $iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod"); $iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone"); $iPad = stripos($_SERVER['HTTP_USER_AGENT'],"iPad"); $Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android"); $webOS = stripos($_SERVER['HTTP_USER_AGENT'],"webOS"); //do something with this information if( $iPod || $iPhone ){ //browser reported as an iPhone/iPod touch -- do something here }else if($iPad){ //browser reported as an iPad -- do something here }else if($Android){ //browser reported as an Android device -- do something here }else if($webOS){ //browser reported as a webOS device -- do something here }
Хотя мне нравятся ответы здесь, я думаю, что лучше использовать следующее …
http://www.htaccesstools.com/articles/detect-and-redirect-iphone/
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} iPhone RewriteRule .* http://iphone.example.com/ [R]
ИЛИ
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} iPhone RewriteCond %{REQUEST_URI} !^/my-iPhone-site/ RewriteRule .* /my-iPhone-site/ [R]
Это альтернатива .htaccess, что означает, что вам остается больше места для работы с php 🙂 надеюсь, что это поможет
Поздний, косвенный ответ на этот вопрос, но я счел это полезным.
Вместо того, чтобы перенаправлять мобильных пользователей, рассмотрите возможность использования гибкого CSS-дизайна для доставки настольных и мобильных пользователей одного и того же контента с двумя разными стилями. Это помогает избежать расщепления и дублирования кода. Вы можете запрограммировать отзывчивый CSS с нуля или использовать предварительно упакованные фреймворки, такие как Twitter Bootstrap.