@Alistair menunjukkan dalam jawaban ini bahwa kadang-kadang pengguna akan kembali ke browser setelah membuka aplikasi. Seorang komentator untuk jawaban itu menunjukkan bahwa nilai waktu yang digunakan harus diubah tergantung pada versi iOS. Ketika tim kami harus berurusan dengan ini, kami menemukan bahwa nilai waktu untuk batas waktu awal dan memberitahu apakah kami telah kembali ke browser harus disetel, dan seringkali tidak berfungsi untuk semua pengguna dan perangkat.
Daripada menggunakan ambang perbedaan waktu yang sewenang-wenang untuk menentukan apakah kami telah kembali ke browser, masuk akal untuk mendeteksi acara "pagehide" dan "pageshow".
Saya mengembangkan halaman web berikut untuk membantu mendiagnosis apa yang sedang terjadi. Ia menambahkan diagnosa HTML saat acara berlangsung, terutama karena menggunakan teknik seperti konsol logging, peringatan, atau Web Inspector, jsfiddle.net dll. Semua memiliki kekurangan dalam alur kerja ini. Daripada menggunakan ambang waktu, Javascript menghitung jumlah peristiwa "pagehide" dan "pageshow" untuk melihat apakah mereka telah terjadi. Dan saya menemukan bahwa strategi yang paling kuat adalah dengan menggunakan batas waktu awal 1000 (daripada 25, 50, atau 100 dilaporkan / disarankan oleh orang lain).
Ini dapat disajikan di server lokal, mis. python -m SimpleHTTPServer
Dan dilihat di iOS Safari.
Untuk memainkannya, tekan tautan "Buka aplikasi yang diinstal" atau "Aplikasi tidak diinstal". Tautan ini masing-masing harus menyebabkan aplikasi Peta atau App Store terbuka. Anda kemudian dapat kembali ke Safari untuk melihat urutan dan waktu acara.
(Catatan: ini hanya akan berfungsi untuk Safari. Untuk peramban lain (seperti Chrome), Anda harus memasang penangan untuk acara yang setara dengan tampilan halaman / acara).
Pembaruan: Seperti yang ditunjukkan @Mikko dalam komentar, acara pageshow / pagehide yang kami gunakan tampaknya tidak lagi didukung di 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){
// app is not installed, go to App Store
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>