Crossbrowser onbeforeunload?

O window.onbeforeunload() triggers em todos os navegadores? Eu preciso de uma funcionalidade onbeforeunload que é suportada pelo menos pelo IE6 e FF3.6.

Para o IE, onbeforeunload() parece ser suportado apenas pelo IE9

    Eu encontrei uma solução para o Firefox com a function setTimeout porque não tem o mesmo comportamento que outros navegadores da web.

     window.onbeforeunload = function (e) { var message = "Are you sure ?"; var firefox = /Firefox[\/\s](\d+)/.test(navigator.userAgent); if (firefox) { //Add custom dialog //Firefox does not accept window.showModalDialog(), window.alert(), window.confirm(), and window.prompt() furthermore var dialog = document.createElement("div"); document.body.appendChild(dialog); dialog.id = "dialog"; dialog.style.visibility = "hidden"; dialog.innerHTML = message; var left = document.body.clientWidth / 2 - dialog.clientWidth / 2; dialog.style.left = left + "px"; dialog.style.visibility = "visible"; var shadow = document.createElement("div"); document.body.appendChild(shadow); shadow.id = "shadow"; //tip with setTimeout setTimeout(function () { document.body.removeChild(document.getElementById("dialog")); document.body.removeChild(document.getElementById("shadow")); }, 0); } return message; } 

    GitHub: https://github.com/Aelios/crossbrowser-onbeforeunload

    Não, não triggers em todos os navegadores. Não é suportado em navegadores móveis, por exemplo, Safari, Opera Mobile e mini, Dolphin. Veja Existe um método alternativo para usar o onbeforeunload no safari móvel?

    Baseando-se na solução de Tushar Ahirrao, isso funciona através do navegador e triggers uma vez (funciona no Firefox, Chrome, qualquer coisa)

          YO   

    Cole o modelo acima para o arquivo vazio e edite-o

    É minha lembrança que o IE foi o único navegador a implementar onbeforeunload , mas alguns navegadores assumiram a responsabilidade de implementá-lo.

    Para encurtar a história, o IE é o único navegador (com exceções muito finas), você encontrará este evento de forma consistente.

    Então você pode usar os dois assim: