Z nejrůznějších důvodů již v nových prohlížečích nefunguje starý způsob zamezení opuštění stránky pomocí window.onunload nebo podobné způsoby.
Přesto existuje nová specifikace, která umožňuje zobrazení zprávy, ale již není tak jednoduchá a může se chovat různě.
Prvním důvodem je, že se událost přejmenovala z unload na beforeunload. Proto je potřeba příslušný handler registrovat na obě události:
//Vanilla JS
window.onunload = f;
window.addEventListener("unload", f);
window.addEventListener("beforeunload", f);
//jQuery
$(window).on('unload beforeunload', f);
Další změna je ta, že některé prohlížeče očekávají text pro zobrazení zprávy jako návratovou hodnotu funkce a jiné ji čekají jako vlastnost události:
unload = function(event) {
//Firefox a IE
if (event.originalEvent) { //jQuery event
event.originalEvent.returnValue = '??';
}
else { //vanilla JS event
event.returnValue = '??';
}
//Webkit (Chrome, Safari, ...)
return '??';
}
Poslední změna je ta, že některé všechny prohlížeče kromě IE11 místo vámi dané zprávy zobrazí jen obecné „Opravdu chcete opustit stránku?“ nebo „Opuštěním stránky můžete přijít o data.“ a někdy mohou zprávu ignorovat úplně (například Chrome vyžaduje, aby uživatel alespoň jednou klikl do stránky, protože dokud uživatel neklikne, tak se nedá předpokládat, že by mohl ztratit něco neuloženého).
S ignorováním unload handleru se můžete setkat hlavně v případě, že se uvnitř metody budete pokoušet zobrazit alert, prompt apod. nebo budete provádět jiné akce (např. posílat ajax), které prohlížeč vyhodnotí jako nežádoucí.