Определить браузер iPhone
Есть ли скрипт для определения, использует ли посетитель iphone (какой бы браузер он ни был, может ли iphone Safari, iPhone для Opera или т. д.)?
Затем отключит некоторые из моих JavaScript.
Спасибо...
6 ответов
Поиск в сети есть два распространенных способа достижения этого. Мой фаворит, хотя в 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 Media Queries), ДЕЛАЙТЕ ЭТО.
//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
}
<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, а затем выполняет действие. Дайте это попробовать.
Хотя мне нравятся ответы здесь, я думаю, что лучше использовать следующее...
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.