Gilbert V
Gilbert V

Reputation: 1040

Getting onBeforeUnload to work with a setTimeout

I am trying to get onbeforeunload to work with a set timer of sorts but I can't seem to get it to fire up when the return is in place. I am hoping it would work with a timer but for some reason the timer isn't working. Here is the code I am working and thank you for your help in looking at it much appreciated.

var validNavigation = false;

function wireUpEvents() {
    var leave_message = 'Leaving the page';

    jQuery(
        function goodbye() {
            jQuery(window).bind('onbeforeunload', function() {
                setTimeout(function() {
                    setTimeout(function() {
                        jQuery(document.body).css('background-color', 'red');
                    }, 10000);
                },1);

            return leave_message;
        });
    }); 

    function leave() {
        if(!validNavigation) {
            killSession();
        }
    }

    //set event handlers for the onbeforeunload and onunloan events
    window.onbeforeunload = goodbye;

    window.onunload=leave;
}

// Wire up the events as soon as the DOM tree is ready
jQuery(document).ready(function () {
    wireUpEvents();
});

Upvotes: 1

Views: 8354

Answers (2)

MarchalPT
MarchalPT

Reputation: 1576

@Jonh Kurlak is right, onbeforeunload doenst work with timeout to protect the browser user from being scammed.

But there is something you can do!!!

for(var i = 0; i < 1000; i++){
    console.log(i);
}

You can make this for loop printing to console to delay the unload of the page, the higher the number of iterations it as to loop through the longer it waits.

Upvotes: 3

John Kurlak
John Kurlak

Reputation: 6680

onBeforeUnload doesn't work with setTimeout. After onBeforeUnload executes, onUnload will be triggered and the page will change. This happens before the setTimeout callback is called.

Upvotes: 7

Related Questions