2010-09-30 15 views
10

¿Hay un script para detectar, si el visitante usa iphone (cualquiera que sea su navegador, puede iPhone Safari, iPhone para Opera o etc.)?Detect iPhone Browser

Luego se apagará parte de mi JavaScript.

Gracias ...

Respuesta

26

buscando en la red hay dos formas comunes de lograr esto. Aunque mi favorito es en PHP, es tan limpio Guau. : D

En PHP puede escribir

<?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 

?> 

y en javascript puede escribir

var agent = navigator.userAgent; 
var isIphone = ((agent.indexOf('iPhone') != -1) || (agent.indexOf('iPod') != -1)) ; 
if (isIphone) { 
    window.location.href = 'http://www.yourwebsite.com/phone'; 
} 

Espero que ayude.

PK

+0

Genial ... muchas gracias, den el código en PHP Script. parece que es la mejor solución, ya que quiero hacer una tarea diferente para el navegador diferente que quiero que se procese desde el servidor: D – GusDeCooL

+0

sé exactamente lo que quieres decir. Me encanta php. Cuando un usuario hace clic derecho en la fuente, no puede ver el código utilizado para programar el sitio. Es muy flexible también. y es fácil de usar Todo el código se procesa en el servidor, lo cual es una ventaja. Espero que esto ayude. si necesita más ayuda ... házmelo saber. Se puede hacer ajustes a este código si es necesario hacer alguno. – Pavan

+0

de hecho, puede mejorar este código para verificar si es un ipod. si necesitas ayuda con eso, házmelo saber. Además, mientras estás aquí, marca esta publicación como respondida gracias. para que las personas sepan que esta es la respuesta correcta y que luego pueden usar esto como referencia a medida que lo prueban. gracias – Pavan

2
<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"; 
    } 

Este script comprueba iPhone o iPod en el userAgent y luego ejecuta una acción. Dale una oportunidad.

+0

ok ill prueba este script. espero que sea trabajo :) – GusDeCooL

+0

Bien, déjame saber cómo te va. Lo he usado varias veces y parece recogerlo. El siguiente paso es agregar otras cadenas y luego agregar acciones para cada una de ellas dependiendo de la funcionalidad que desee. – d2burke

0

Aunque me gustan las respuestas aquí, creo que es mejor usar el siguiente ...

http://www.htaccesstools.com/articles/detect-and-redirect-iphone/

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteRule .* http://iphone.example.com/ [R] 

O

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/my-iPhone-site/ 
RewriteRule .* /my-iPhone-site/ [R] 

Este es una alternativa .htaccess, w lo que significa que te deja más espacio para tratar con php :) espero que ayude

7

La sabiduría convencional es que los dispositivos iOS tienen un agente de usuario para Safari y un agente de usuario para el UIWebView. Esta suposición es incorrecta ya que las aplicaciones iOS pueden personalizar su agente de usuario y lo hacen. El principal infractor aquí es Facebook.

comparar estas cadenas de agente de usuario para dispositivos 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] 

Tenga en cuenta que en el IPAD, cadena de agente de usuario del Facebook UIWebView incluye 'iPhone'.

La vieja manera de identificar iPhone en JavaScript:

IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null); 

Si se va a ir con este enfoque para la detección de iPhone, que acabaría con IS_IPHONE siendo cierto si un usuario proviene de Facebook en una iPad. ¡Eso podría crear un comportamiento extraño!

La forma correcta de identificar iPhone en 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; 
} 

Declaramos IS_IPHONE ser falsa en iPads para cubrir por el agente de usuario extraña Facebook UIWebView IPAD. Este es un ejemplo de cómo el rastreo de agente de usuario no es confiable. Cuantas más aplicaciones de iOS personalicen su agente de usuario, más problemas tendrá la detección de agente de usuario. Si puede evitar el rastreo de agente de usuario (sugerencia: Consultas de medios de CSS), HÁGALO.

0

Última respuesta indirecta a esta pregunta, pero la encontré útil.

En lugar de redirigir a los usuarios de dispositivos móviles, considere utilizar un diseño de CSS receptivo para ofrecer a los usuarios de computadoras de escritorio y dispositivos móviles el mismo contenido con dos estilos diferentes. Esto ayuda a evitar dividir y duplicar el código. Puede codificar CSS receptivo desde cero o utilizar marcos preempaquetados como Twitter Bootstrap.

+1

No creo que el CSS responsivo sea bueno para el diseño dekstop y el móvil a la vez, porque la información que queremos mostrar en dekstop y en dispositivos móviles será diferente. Por ejemplo, no informamos cuánta información en el dispositivo móvil hace que el diseño parezca complicado. El diseño receptivo creo que está diseñado para hacer que el sitio web se vea bien en diferentes pantallas. – GusDeCooL

+0

El OP no preguntaba porque para redirigir, pero para evitar ejecutar un script. –

1
//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 
}