【问题标题】:Getting onBeforeUnload to work with a setTimeout让 onBeforeUnload 与 setTimeout 一起工作
【发布时间】:2012-09-24 19:37:06
【问题描述】:

我正在尝试让 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();
});

【问题讨论】:

  • 请在发布问题时正确格式化您的代码,这样更容易理解它在说什么。它还可以帮助您自己,任何体面的代码编辑器都将具有 indentformat 功能,可以为您完成工作。对于 SO 使用空格而不是制表符,并在每行前加上 4 个空格以使代码块显示为代码。
  • 抱歉,我发布代码总是很复杂,别以为我会安静地得到它。

标签: javascript settimeout onbeforeunload


【解决方案1】:

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

【讨论】:

  • 感谢@John 的回答。如果我需要在触发 onbeforeunload 的特定时间段后执行方法,你知道有什么方法吗?
  • @AdarshKumar 防止页面在用户尝试离开后退出的唯一方法是将同步代码放入 onbeforeunload/onunload 处理程序中。从技术上讲,您可以放置​​一个循环,直到经过一定时间后才会执行,但这会效率低下并且会阻塞 UI。
  • 如果有任何同步 Ajax 调用
  • @Nayeem:同步 Ajax 调用属于我上面提到的“同步代码”的范畴。
【解决方案2】:

@Jonh Kurlak 是对的,onbeforeunload 不会与超时一起使用以保护浏览器用户不被骗。

但是你可以做点什么!!!

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2016-10-06
    • 2011-11-30
    • 2014-02-19
    相关资源
    最近更新 更多