1

我试图让 onbeforeunload 使用某种设置的计时器,但是当返回到位时,我似乎无法启动它。我希望它可以与计时器一起使用,但由于某种原因计时器无法正常工作。这是我正在工作的代码,非常感谢您帮助查看它。

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();
});
4

2 回答 2

7

onBeforeUnload不适用于setTimeout. onBeforeUnload执行后,onUnload将被触发,页面将发生变化。这发生在setTimeout回调被调用之前。

于 2013-01-24T17:57:26.073 回答
0

@Jonh Kurlak 是对的,onbeforeunload 不使用超时来保护浏览器用户免受诈骗。

但是有什么可以做的!!!

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

您可以将此 for 循环打印到控制台以延迟页面的卸载,它循环的迭代次数越高,等待的时间就越长。

于 2020-12-15T23:12:48.427 回答