Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I can't trigger the unload event in Chrome

This code runs fine on Firefox, but I can't make the unload event work on Chrome anymore. Did Chrome stop supporting the unload event?

This is my code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>

<script type="text/javascript" src="../jquery/jquery.js"></script>

<script type="text/javascript">

    function pageHidden(evt) { alert("Are you sure 1?"); } //WORKS ON FIREFOX BUT NOT IN CHROME
    window.addEventListener("pagehide", pageHidden, false);

    window.onunload = function () { alert("Are you sure 2?"); } //TRIGGERS ON LOAD NOT ON UNLOAD

    $(window).unload(function () { //WORKS ON FIREFOX BUT NOT IN CHROME
        alert("Are you sure 3?");
    });

</script>
</head>

<body>
TEST WEBSITE
<a href="http://www.iamawesome.com">external link</a>
</body> 
</html>

How can I get the unload event to work in Chrome?

Thanks!


ANSWER: Don't test the unload event with alerts ;)

like image 807
John Shepard Avatar asked Aug 29 '12 16:08

John Shepard


2 Answers

From what I've read it seems Chrome blocks alerts once that event has been triggered. You can run some functions, however, just not anything that interacts with the user it seems.

From window.onbeforeunload in Chrome: what is the most recent fix?, it seems, if all you want to do is pop up a confirmation message, you have to do it by returning a string with the message from the function you set as the callback.

window.onbeforeunload = function() {
    // Some wrap up code (no alerts, confirms, redirects, etc)
    return 'My confirmation messsage'; 
}

The text "My confirmation message" will then show up in a confirmation dialogue of Chrome's choosing. Firefox documents this behaviour here.

like image 149
jeteon Avatar answered Nov 14 '22 06:11

jeteon


window.onunload = alert("Are you sure 2?");

This is incorrect. You are setting onunload to the result of alert, you need to set it to a function:

window.onunload = function(){
    alert("Are you sure?");
}

If you want to use jQuery, this will work in all browsers.

$(window).unload(function () {
     alert("Are you sure?");
});

NOTE: It might seem like it's not working in Chrome, but it is. That's because Chrome blocks alerts in the onunload event.

like image 22
Rocket Hazmat Avatar answered Nov 14 '22 05:11

Rocket Hazmat