@Alistair bu cevaba işaret etti , bazen kullanıcıların uygulamayı açtıktan sonra tarayıcıya döneceğini belirtti. Bu cevaba yapılan bir yorumcu, kullanılan zaman değerlerinin iOS sürümüne bağlı olarak değiştirilmesi gerektiğini belirtti. Ekibimiz bununla uğraşmak zorunda kaldığında, ilk zaman aşımı ve tarayıcıya geri dönüp dönmediğimizi söyleyen zaman değerlerinin ayarlanması gerektiğini ve çoğu zaman tüm kullanıcılar ve cihazlar için çalışmadığını gördük.
Tarayıcıya geri dönüp dönmediğimizi belirlemek için rastgele bir zaman farkı eşiği kullanmak yerine, "pagehide" ve "pageshow" olaylarını tespit etmek mantıklıydı.
Neler olup bittiğini teşhis etmeye yardımcı olmak için aşağıdaki web sayfasını geliştirdim. Olaylar ortaya çıktıkça HTML teşhisi ekler, çünkü konsol günlüğü, uyarılar veya Web Inspector, jsfiddle.net gibi tekniklerin kullanılması bu iş akışında dezavantajlara sahipti. Javascript, bir zaman eşiği kullanmak yerine, gerçekleşip gerçekleşmediğini görmek için "pagehide" ve "pageshow" etkinliklerinin sayısını sayar. Ve en sağlam stratejinin 1000 başlangıç zaman aşımı kullanmak olduğunu buldum (başkaları tarafından bildirilen / önerilen 25, 50 veya 100 yerine).
Bu, yerel bir sunucuda sunulabilir python -m SimpleHTTPServer
ve örneğin iOS Safari'de görüntülenebilir.
Bununla oynamak için "Yüklü bir uygulamayı aç" veya "Uygulama yüklü değil" bağlantılarına basın. Bu bağlantılar sırasıyla Haritalar uygulamasının veya App Store'un açılmasına neden olmalıdır. Ardından olayların sırasını ve zamanlamasını görmek için Safari'ye dönebilirsiniz.
(Not: bu yalnızca Safari için çalışır. Diğer tarayıcılarda (Chrome gibi) sayfa gizleme / şov eşdeğeri etkinlikler için işleyiciler yüklemeniz gerekir).
Güncelleme: @Mikko'nun yorumlarda belirttiği gibi, kullandığımız sayfa gösterisi / sayfa gizleme etkinlikleri artık iOS8'de artık desteklenmiyor.
<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>