iPhone WebApps, y a-t-il un moyen de détecter comment il a été chargé? Écran d'accueil vs Safari?

j'ai une application web iPhone, et je suis intéressé à détecter si l'application a été chargée soit à partir de:

  1. iPhone Safari
  2. iPhone installé application web (via le add à mon écran d'accueil) qui se charge sans les barres safari.

des idées?

26
demandé sur Richard Slater 2010-04-29 19:54:29

8 réponses

vous pouvez déterminer si une page web est affichée en mode plein écran en utilisant la fenêtre.Navigator.propriété JavaScript booléenne autonome en lecture seule. https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html

if (window.navigator.standalone) {
    // fullscreen mode

}
62
répondu Shaji 2017-07-02 17:01:05

vous pouvez détecter le mode par Javascript comme décrit ci - dessus-ou vous pouvez utiliser PHP et l'agent utilisateur.

<?
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),"iphone")) {
   if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),"safari")) {
      echo('Running in browser on iPhone');
   }else{
      echo('Running as stand alone WebApp on iPhone');
   }
}else{
   echo('Running on device other than iPhone.');
}
?>

Profitez-en!

11
répondu cstrat 2012-05-20 07:07:56

C'est ce que j'utilise, fonctionne bien:

if (window.navigator.userAgent.indexOf('iPhone') != -1) {
    if (window.navigator.standalone == true) {
        alert("Yes iPhone! Yes Full Screen!");
    } else {
        alert("Not Full Screen!");
    };} else {
        alert("Not iPhone!");
        document.location.href = 'please-open-from-an-iphone.html';
};
3
répondu kaleazy 2011-11-30 11:40:38

Comment faire avec PHP et filtrer les faux positifs

je pense que la réponse de @strat est dans la bonne direction, si vous voulez utiliser PHP. Sauf que ça ne marchera pas à moins que le meta capable de l'application mobile ne soit défini. Sinon, l'iPhone placera à la maison un signet ouvrant safari mobile. En outre, il est retourné faux positifs, par exemple lors de l'accès à la page à partir de tout autre navigateur sur iPhone, comme le navigateur Facebook.

heureusement, le standalone user agent string a une particularité: il n'y a que 3 slashes. J'ai testé divers autres navigateurs et ils ont tous plus de 3. C'est hackish, mais on peut utiliser ça à notre avantage. En outre, il est intéressant de noter qu'un webview standard dans une application aura 2 slashes.

donc c'est l'exemple de travail minimum:

<?php
// We need to add the mobile web app capable meta. Status bar is set to black to avoid our text go under the status bar.
?>

<html>
<head>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
</head>
<body>


<?php

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);

if ( strpos($ua,"iphone") || strpos($ua,"ipad") ) {
   if ( strpos($ua,"safari") ) {
      echo('Running in safari on iPhone/iPad');
   } else if ( substr_count($ua, '/') === 3 ) {
      echo('Running as stand alone WebApp on iPhone/iPad');
   } else if ( substr_count($ua, '/') === 2 ) {
      echo('Running in a WebView on a iPhone/iPad app');
   } else {
      echo('Running in another browser on iPhone/iPad');
   }
} else {
   echo('Running on device other than iPhone/iPad.');
}

?>

</body>
</html>
2
répondu Francesco Frapporti 2014-08-02 10:48:43

Je ne sais pas si ce comportement remonte loin, mais iOS présentera différentes chaînes UserAgent au serveur qui peut être utilisé pour détecter si la page est demandée par un navigateur webapp ou safari.

Navigateur Safari

Mozilla / 5.0 (iPhone; CPU iPhone OS 8_1_1 comme Mac OS X) AppleWebKit/600.1.4 (KHTML, comme Gecko) Version / 8.0 Mobile / 12B436 Safari / 600.1.4

Écran D'Accueil Bouton / Application Web

Mozilla / 5.0 (iPhone; CPU iPhone OS 8_1_1 comme Mac OS X) AppleWebKit/600.1.4 (KHTML, comme Gecko) Mobile /12B436

Avis il ne comprend pas "Safari" dans le UserAgent. J'ai confirmé que ce comportement remonte au moins à iOS 7, mais j'imagine que c'est encore plus loin.

de sorte que vous pouvez tester la présence de iPhone ou iPad dans la chaîne UserAgent et l'absence de Safari pour détecter qu'il a été ouvert à partir de l'écran d'Accueil.

1
répondu Paul Alexander 2014-12-05 06:55:28

je préfère cette doublure pour déterminer si c'est fullscreen/dans une application web ou non.

var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);
0
répondu Raz0rwire 2014-03-19 12:27:54

vérifiez les en-têtes HTTP lors de l'accès au site depuis iPhone Safari et la WebApp pour voir s'ils sont différents.

Je ne sais pas s'ils le sont, mais s'ils le sont, je suis sûr que vous serez en mesure de le mettre en œuvre quelque part dans votre site web.

http://php.net/manual/en/function.headers-list.php

-1
répondu Emil 2010-04-29 17:18:43

Peut être simplifié à var webApp = window.navigator.standalone || false;

peut être simplifié à nouveau à var webApp = window.navigator.standalone;

-1
répondu Matt 2015-09-15 14:42:50