Bazen sunucuya, kullanıcının sayfadan ayrıldığını bildirmek isteyebilirsiniz. Bu, örneğin sunucuda geçici olarak depolanan kaydedilmemiş görüntüleri temizlemek, bu kullanıcıyı "çevrimdışı" olarak işaretlemek veya oturumlarını tamamladıklarında oturum açmak için kullanışlıdır.
Geçmişte, beforeunload
işlevde bir AJAX isteği gönderirdiniz , ancak bunun iki sorunu vardır. Eşzamansız bir istek gönderirseniz, isteğin doğru şekilde yürütüleceğine dair bir garanti yoktur. Eşzamanlı bir istek gönderirseniz, bu daha güvenilirdir, ancak tarayıcı istek tamamlanana kadar askıda kalır. Bu yavaş bir istekse, bu kullanıcı için büyük bir rahatsızlık olacaktır.
Şans eseri, şimdi sahibiz navigator.sendBeacon()
. sendBeacon()
Yöntemin kullanılmasıyla, Kullanıcı Aracısının bunu yapma fırsatı olduğunda, yüklemeyi geciktirmeden veya sonraki gezinmenin performansını etkilemeden veriler web sunucusuna eşzamansız olarak iletilir. Bu, analitik verilerinin gönderilmesiyle ilgili tüm sorunları çözer: veriler güvenilir bir şekilde gönderilir, eşzamansız olarak gönderilir ve sonraki sayfanın yüklenmesini etkilemez. İşte kullanımına bir örnek:
window.addEventListener("unload", logData, false);
function logData() {
navigator.sendBeacon("/log.php", analyticsData);
}
sendBeacon()
şurada desteklenmektedir :
- Kenar 14
- Firefox 31
- Chrome 39
- Safari 11.1
- Opera 26
- iOS Safari 11.4
Şu anda şuralarda desteklenmemektedir:
- Internet Explorer
- Opera Mini
Desteklenmeyen tarayıcılar için destek eklemeniz gerekmesi durumunda sendBeacon () için bir polyfill burada . Yöntem tarayıcıda mevcut değilse, bunun yerine senkronize bir AJAX isteği gönderecektir.