103 votes

détecter ipad/iphone webview via javascript

Est-il un moyen de différer via javascript si le site web fonctionne à l'intérieur de l'ipad safari ou à l'intérieur d'une application WebView?

85voto

ThinkingStiff Points 19251

Il utilise une combinaison d' window.navigator.userAgent et window.navigator.standalone. Il peut faire la distinction entre les quatre membres en ce qui concerne un iOS application web: safari (navigateur), autonome (plein écran), uiwebview, et pas iOS.

Démo: http://jsfiddle.net/ThinkingStiff/6qrbn/

var standalone = window.navigator.standalone,
    userAgent = window.navigator.userAgent.toLowerCase(),
    safari = /safari/.test( userAgent ),
    ios = /iphone|ipod|ipad/.test( userAgent );

if( ios ) {
    if ( !standalone && safari ) {
        //browser
    } else if ( standalone && !safari ) {
        //standalone
    } else if ( !standalone && !safari ) {
        //uiwebview
    };
} else {
    //not iOS
};

82voto

neoneye Points 11545

Les Agents Utilisateurs

Running in UIWebView
Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176

Running in Safari on 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

Running in Safari on Mac OS X
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3

Running in Chrome on Mac OS X
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19

Running in FireFox on Mac OS X
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0

Code De Détection D'

var is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent);
var is_safari_or_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent);

9voto

Nicolas S Points 2495

Je pense que vous pouvez simplement utiliser l' User-Agent.


Mise à JOUR

Page navigué à l'aide de Safari iPhone

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7

Je vais essayer dans un deuxième avec UIWebView

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117

La différence est que le Safari on dit Safari/6531.22.7


Solution

var isSafari = navigator.userAgent.match(/Safari/i) != null;

7voto

John Doherty Points 300

Ouais:

// is this an IPad ?
var isiPad = (navigator.userAgent.match(/iPad/i) != null);

// is this an iPhone ?
var isiPhone = (navigator.userAgent.match(/iPhone/i) != null);

// is this an iPod ?
var isiPod = (navigator.userAgent.match(/iPod/i) != null);

0voto

Preston Points 544

Je sais que ce code va vérifier si il est accessible à partir d'un ajout d'une icône à l'écran d'accueil:

if (window.navigator.standalone == true) {
//not in safari
}

mais je ne suis pas sûr de savoir comment il réagirait face à une UIWebView. La seule autre solution que je pouvais penser est d'obtenir l'agent de l'utilisateur ou à l'aide de - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType et le remplacement de la chaîne de requête de la page, vous accédez avec quelque chose de la page utilise pour vérifier qu'elle est accessible à partir d'un affichage web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X