@Alistair указал в этом ответе что иногда пользователи возвращаются в браузер после открытия приложения. Комментатор этого ответа указал, что используемые значения времени должны быть изменены в зависимости от версии iOS. Когда нашей команде пришлось столкнуться с этим, мы обнаружили, что значения времени для начального тайм-аута и определения того, вернулись ли мы в браузер, должны быть настроены, и часто не работали для всех пользователей и устройств.
Вместо использования произвольного порогового значения разницы во времени для определения того, вернулись ли мы в браузер, имело смысл обнаруживать события «pagehide» и «pageshow».
Я разработал следующую веб-страницу, чтобы помочь диагностировать происходящее. Он добавляет диагностику HTML по мере развертывания событий, в основном потому, что использование таких методов, как ведение журнала консоли, предупреждения или веб-инспектор, jsfiddle.net и т. Д., Имеет свои недостатки в этом рабочем процессе. Вместо того, чтобы использовать порог времени, Javascript подсчитывает количество событий «pagehide» и «pageshow», чтобы узнать, произошли ли они. И я обнаружил, что наиболее надежной стратегией было использование начального тайм-аута 1000 (а не 25, 50 или 100, сообщенных / предложенных другими).
Это может быть выполнено на локальном сервере, например, python -m SimpleHTTPServer
и просмотрено в iOS Safari.
Чтобы поиграть с ним, нажмите ссылку «Открыть установленное приложение» или «Приложение не установлено». Эти ссылки должны вызывать открытие соответственно приложения Карты или App Store. Затем вы можете вернуться в Safari, чтобы увидеть последовательность и время событий.
(Примечание: это будет работать только для Safari. Для других браузеров (например, Chrome) вам придется установить обработчики для событий, эквивалентных pagehide / show).
Обновление: как @Mikko указал в комментариях, используемые нами события pageshow / pagehide, по-видимому, больше не поддерживаются в iOS8.
<html>
<head>
</head>
<body>
<a href="maps://" onclick="clickHandler()">Open an installed app</a>
<br/><br/>
<a href="xmapsx://" onclick="clickHandler()">App not installed</a>
<br/>
<script>
var hideShowCount = 0 ;
window.addEventListener("pagehide", function() {
hideShowCount++ ;
showEventTime('pagehide') ;
});
window.addEventListener("pageshow", function() {
hideShowCount++ ;
showEventTime('pageshow') ;
});
function clickHandler(){
var hideShowCountAtClick = hideShowCount ;
showEventTime('click') ;
setTimeout(function () {
showEventTime('timeout function '+(hideShowCount-hideShowCountAtClick)+' hide/show events') ;
if (hideShowCount == hideShowCountAtClick){
window.location = 'http://itunes.apple.com/app' ;
}
}, 1000);
}
function currentTime()
{
return Date.now()/1000 ;
}
function showEventTime(event){
var time = currentTime() ;
document.body.appendChild(document.createElement('br'));
document.body.appendChild(document.createTextNode(time+' '+event));
}
</script>
</body>
</html>