Определить браузер iPhone - PullRequest
       9

Определить браузер iPhone

11 голосов
/ 30 сентября 2010

есть ли скрипт для определения, использует ли посетитель iphone (каким бы ни был его браузер, может, iphone Safari, iPhone для Opera и т. Д.)?

Затем отключит некоторые из моих JavaScript.

Спасибо ...

Ответы [ 6 ]

28 голосов
/ 30 сентября 2010

поиск в сети есть два распространенных способа добиться этого. Мой фаворит, хотя в 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

7 голосов
/ 21 октября 2012

Общепринято, что на устройствах 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), СДЕЛАЙТЕ ЭТО.

3 голосов
/ 23 октября 2017
//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
}
2 голосов
/ 30 сентября 2010
<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, а затем выполняет действие.Попробуйте это.

1 голос
/ 19 июля 2012

Хотя мне нравятся ответы здесь, я думаю, что лучше использовать следующее ...

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 :), надеюсь, это поможет

0 голосов
/ 25 июня 2013

Поздний косвенный ответ на этот вопрос, но я нашел его полезным.

Вместо того, чтобы перенаправлять мобильных пользователей, рассмотрите возможность использования адаптивного дизайна CSS, чтобы предоставить настольным и мобильным пользователям один и тот же контент с двумя разными стилями.Это помогает избежать разделения и дублирования кода.Вы можете кодировать адаптивный CSS с нуля или использовать готовые фреймворки, такие как Twitter Bootstrap.

...