Подтвердить что ты не робот

IPhone WebApps, есть ли способ определить, как он был загружен? Домашний экран против Safari?

У меня есть iPhone Web App, и мне интересно узнать, загружено ли приложение из:

  • iPhone Safari
  • iPhone установил веб-приложение (через дополнение к моему домашнему экрану), которое загружается без баров Safari.

Любые идеи?

4b9b3361

Ответ 2

Вы можете определить режим с помощью Javascript, как описано выше, или вы можете использовать PHP и пользовательский агент.

<?
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.');
}
?>

Наслаждайтесь!

Ответ 3

Это то, что я использую, отлично работает:

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';
};

Ответ 4

Как это сделать с PHP и фильтровать ложные срабатывания

Я думаю, что ответ @strat находится в правильном направлении, если вы хотите использовать PHP. За исключением того, что он не будет работать, если не настроено мобильное приложение. В противном случае iPhone разместит в своем доме мобильное сафари, открывающее закладки. Кроме того, он возвращает ложные срабатывания, например, при доступе к странице из любого другого браузера на iPhone, например, в браузере Facebook.

К счастью, отдельная строка пользовательского агента имеет особенность: в ней всего три слэша. Я тестировал различные другие браузеры, и у всех их было больше 3. Это взламывает, но мы можем использовать это в наших интересах. Кроме того, интересно отметить, что стандартный веб-просмотр в приложении будет иметь 2 слэша.

Итак, это минимальный рабочий пример:

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

Ответ 5

Я не уверен, как далеко назад это происходит, но iOS представит на сервер разные строки UserAgent, которые могут быть использованы для определения того, запрашивается ли страница браузером webapp или Safari.

Браузер Safari

Mozilla/5.0 (iPhone, iPhone с процессором 8_1_1, как Mac OS X) AppleWebKit/600.1.4 (KHTML, например, Gecko) Версия /8.0 Mobile/12B436 Safari/600.1.4

Кнопка главного экрана/веб-приложение

Mozilla/5.0 (iPhone, iPhone для iPhone 8_1_1 для Mac OS X) AppleWebKit/600.1.4 (KHTML, например, Gecko) Mobile/12B436

Обратите внимание, что он не включает в себя "Safari" в UserAgent. Я подтвердил, что это поведение восходит по крайней мере к iOS 7, но я бы даже подумал.

Итак, вы можете проверить наличие iPhone или iPad в строке UserAgent и отсутствие Safari, чтобы обнаружить, что он был открыт с главного экрана.

Ответ 6

Я предпочитаю, чтобы этот однострочный шрифт определял, полно ли он/в веб-приложении или нет.

var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);

Ответ 7

Можно упростить   var webApp = window.navigator.standalone || false;

Можно снова упростить   var webApp = window.navigator.standalone;

Ответ 8

Проверьте HTTP-заголовки при доступе к сайту с iPhone Safari и WebApp, чтобы узнать, отличаются ли они.

Я не знаю, являются ли они, но если они есть, я уверен, что вы сможете реализовать это где-то на своем веб-сайте.

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