У меня есть веб-приложение для iPhone, и я хочу определить, было ли приложение загружено с..:
Есть идеи?
Определить, отображается ли веб-страница в полноэкранном режиме, можно с помощью JavaScript-свойства window.navigator.standalone read-only Boolean. 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';
};
Я думаю, что @страт 'ы ответ в правильном направлении, если вы хотите использовать PHP. За исключением того, что он выиграл'т работу, если мобильное приложение способно мета находится. В противном случае iPhone будет разместить в доме закладку открытие мобильного сафари. Кроме того, он вернулся к ложным срабатываниям, например при обращении к странице с любой другой браузер на iPhone, как браузер Facebook.
К счастью, отдельной строки агента пользователя имеет особенность: он имеет только 3 слэши в нем. Я тестировал различные другие браузеры и все они имеют более чем 3. Это'ы программистские, но мы можем использовать это в наших интересах. Кроме того, он'ы интересно отметить, что стандартный WebView в приложение будет иметь 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 будут представлены различные Ашераденс строки на сервер, который может использоваться, чтобы обнаружить, если страница запрашивается браузером веб-приложение или Safari.
В браузере Mozilla/5.0 (iPhone и процессор у iPhone ОС 8_1_1 как Mac ОС X) AppleWebKit/600.1.4 (ХТМЛ, как Гекко) версия/8.0 мобильного/12B436 в Safari/600.1.4
В браузере Mozilla/5.0 (iPhone и процессор у iPhone ОС 8_1_1 как Mac ОС X) AppleWebKit/600.1.4 (ХТМЛ, как Гекко) мобильного/12B436
Заметьте, он не включает 'сафари' в Ашераденс. Я'вэ подтвердил, что такое поведение уходит корнями к, по крайней мере, в iOS 7, но я'd не представляю даже дальше.
Так что вы можете проверить на присутствие мобильный
или айпад
в строку UserAgent и отсутствие сафари
, чтобы обнаружить, что это'ы были открыты на главном экране.
Проверьте HTTP-заголовки при доступе к сайту из iPhone Safari и WebApp, чтобы убедиться, что они отличаются.
Я не знаю, так ли это, но если да, то я уверен, что вы сможете реализовать это где-нибудь на своем сайте.