2010-09-30 5 views
10

Y at-il un script à détecter, si le visiteur utilise iphone (quel que soit son navigateur, peut-iphone Safari, iPhone pour Opera ou etc.)?Détecter iPhone Browser

Puis va éteindre certains de mes JavaScript.

... Merci

Répondre

26

en cherchant sur le net il y a deux façons courantes d'y parvenir. Mon préféré est en PHP c'est tellement propre? sensationnel. : D

En PHP, vous pouvez écrire

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

?> 

et javascript vous pouvez écrire

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

espoir qui aide.

PK

+0

Génial ... merci beaucoup de donner le code en PHP Script. semble que c'est la meilleure solution, puisque je veux faire une tâche différente pour le navigateur différent que je veux qu'il soit traité à partir du serveur: D – GusDeCooL

+0

je sais exactement ce que vous voulez dire. J'aime php. Quand un utilisateur clique droit sur la source, vous ne pouvez pas voir le code utilisé pour programmer le site. C'est très flexible aussi. et c'est facile à utiliser. Tout le code est traité sur le serveur ce qui est un bonus. J'espère que cela t'aides. si vous avez besoin de plus d'aide ... faites le moi savoir. Une mise au point de ce code peut être effectuée s'il en faut. – Pavan

+0

en fait, vous pouvez améliorer ce code pour vérifier également s'il s'agit d'un iPod. Si vous avez besoin d'aide, faites-le moi savoir. Aussi pendant que vous êtes ici, marquez cet article en tant que remerciements. alors les gens savent que c'est la bonne réponse et ils peuvent alors l'utiliser comme référence comme vous l'avez essayé. merci – 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"; 
    } 

Ce script vérifie pour iPhone ou iPod dans le userAgent et exécute ensuite une action. Essayez ceci.

+0

ok ill tester ce script. J'espère que ça fonctionne :) – GusDeCooL

+0

Ok, laissez-moi savoir comment ça se passe pour vous. Je l'ai utilisé plusieurs fois et semble chercher trouver. L'étape suivante consiste à ajouter d'autres chaînes, puis à ajouter des actions pour chacune d'entre elles en fonction de la fonctionnalité souhaitée. – d2burke

0

Bien que j'aime les réponses ici, je pense que mieux utiliser ce qui suit ...

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

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

OU

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

Cette est une alternative .htaccess, w Cela signifie que vous avez plus de place pour faire face à PHP :) J'espère que ça aide

7

On pense généralement que les appareils iOS ont un agent utilisateur pour Safari et un agent utilisateur pour UIWebView. Cette hypothèse est incorrecte car les applications iOS peuvent et personnalisent leur agent utilisateur. Le délinquant principal ici est Facebook.

Comparez ces chaînes d'agent utilisateur à partir d'appareils 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] 

Notez que sur l'iPad, la chaîne de l'agent utilisateur Facebook UIWebView comprend 'iPhone'.

L'ancienne façon d'identifier iPhone en JavaScript:

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

Si vous deviez aller avec cette approche pour détecter iPhone, vous finiriez avec IS_IPHONE être vrai si un utilisateur vient de Facebook sur un iPad. Cela pourrait créer un comportement étrange!

La bonne façon d'identifier 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; 
} 

Nous déclarons IS_IPHONE faux sur iPad pour couvrir l'agent utilisateur bizarre Facebook UIWebView iPad. Ceci est un exemple de la façon dont l'agent utilisateur reniflant n'est pas fiable. Plus il y a d'applications iOS qui personnalisent leur agent d'utilisateur, plus les problèmes rencontrés par l'agent utilisateur sont importants. Si vous pouvez éviter le sniffing de l'agent utilisateur (indice: CSS Media Queries), FAITES-LE.

0

Fin, réponse indirecte à cette question, mais je l'ai trouvé utile. Au lieu de rediriger les utilisateurs mobiles, pensez à utiliser la conception CSS réactive pour offrir aux utilisateurs de bureau et mobiles le même contenu avec deux styles différents. Cela permet d'éviter de diviser et de dupliquer le code. Vous pouvez coder du code CSS réactif à partir de zéro, ou utiliser des frameworks préemballés comme Twitter Bootstrap.

+1

Je ne pense pas que css responsive est bon pour la conception dekstop et mobile à la fois, parce que les informations que nous voulons montrer dans dekstop et mobile seront différentes. Par exemple, nous n'avons pas beaucoup d'informations dans les mobiles qui rendent le design semble compliqué. Je pense que le design réactif est conçu pour faire en sorte que le site web ressemble à des produits dans différents écrans. – GusDeCooL

+0

L'OP ne demandait pas parce que pour rediriger, mais pour éviter d'exécuter 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 
}