iPhone WebApps, есть ли способ определить, как он был загружен? Домашний экран против Safari? - PullRequest
26 голосов
/ 29 апреля 2010

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

  1. iPhone Safari
  2. Установленное на iPhone веб-приложение (с помощью функции «Добавить на мой домашний экран»), которое загружается без полос сафари.

Есть идеи?

Ответы [ 8 ]

65 голосов
/ 29 апреля 2010

Вы можете определить, отображается ли веб-страница в полноэкранном режиме, используя логическое свойство JavaScript window.navigator.standalone только для чтения. https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html

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

}
11 голосов
/ 03 февраля 2011

Вы можете определить режим с помощью 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.');
}
?>

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

4 голосов
/ 30 ноября 2011

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

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';
};
2 голосов
/ 24 декабря 2013

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

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

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

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

<?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>
1 голос
/ 05 декабря 2014

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

Safari Browser

Mozilla / 5.0 (iPhone; процессор iPhone OS 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 OS 8_1_1, как Mac OS X) AppleWebKit / 600.1.4 (KHTML, как Gecko) Mobile / 12B436

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

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

0 голосов
/ 15 сентября 2015

Может быть упрощено до var webApp = window.navigator.standalone || false;

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

0 голосов
/ 19 марта 2014

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

var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);
0 голосов
/ 29 апреля 2010

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

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

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

...