У меня есть iPhone Web App, и мне интересно узнать, загружено ли приложение из:
- iPhone Safari
- iPhone установил веб-приложение (через дополнение к моему домашнему экрану), которое загружается без баров Safari.
Любые идеи?
У меня есть iPhone Web App, и мне интересно узнать, загружено ли приложение из:
Любые идеи?
Вы можете определить, отображается ли веб-страница в полноэкранном режиме, используя свойство window.navigator.standalone для чтения только для чтения. https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
if (window.navigator.standalone) {
// fullscreen mode
}
Вы можете определить режим с помощью 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.');
}
?>
Наслаждайтесь!
Это то, что я использую, отлично работает:
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';
};
Я думаю, что ответ @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>
Я не уверен, как далеко назад это происходит, но iOS представит на сервер разные строки UserAgent, которые могут быть использованы для определения того, запрашивается ли страница браузером webapp или 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
, чтобы обнаружить, что он был открыт с главного экрана.
Я предпочитаю, чтобы этот однострочный шрифт определял, полно ли он/в веб-приложении или нет.
var webApp = (typeof window.navigator.standalone != 'undefined' && window.navigator.standalone ? true : false);
Можно упростить var webApp = window.navigator.standalone || false;
Можно снова упростить var webApp = window.navigator.standalone;
Проверьте HTTP-заголовки при доступе к сайту с iPhone Safari и WebApp, чтобы узнать, отличаются ли они.
Я не знаю, являются ли они, но если они есть, я уверен, что вы сможете реализовать это где-то на своем веб-сайте.