【问题标题】:Navigate to other page when user clicks 'stay' on beforeunload当用户在 beforeunload 上单击“停留”时导航到其他页面
【发布时间】:2017-05-30 18:57:17
【问题描述】:

我需要有办法做到以下几点:

  1. 当用户点击退出窗口时,应该询问他们是留下还是离开
  2. 如果用户点击停留,它应该将他们引导到新页面
  3. 如果用户点击离开,窗口应该关闭

我目前有以下代码:

var timeout;
$(window).on('beforeunload', function (){
    timeout = setTimeout(function() {
       alert('You stayed');
       window.location.href = 'desktop/salvage';
    }, 1000);
    return "You save some unsaved data, Do you want to leave?";
});

function noTimeout() {
    alert("You're leaving!");
    clearTimeout(timeout);
}

window.unload = noTimeout;

警报运行正常,但如果用户单击停留,则尝试导航到另一个页面在加载之前再次运行并再次提示您。这会陷入无限循环,直到您决定离开页面,如果您选择“停留”,您将被导航到应该导航到的页面。

【问题讨论】:

    标签: javascript onbeforeunload window.location


    【解决方案1】:

    当您确实希望用户被重定向到另一个页面时,使用布尔标志来防止警报:

    var timeout;
    var redirecting = false;
    $(window).on('beforeunload', function (){
        if (redirecting) { return; }
        timeout = setTimeout(function() {
           alert('You stayed');
           redirecting = true;
           window.location.href = 'desktop/salvage';
        }, 1000);
        return "You save some unsaved data, Do you want to leave?";
    });
    
    function noTimeout() {
        alert("You're leaving!");
        clearTimeout(timeout);
    }
    
    window.unload = noTimeout;
    

    【讨论】:

    • 实际上,如果服务器没有立即响应(这种情况经常发生),即使用户点击“离开”,您也很有可能获得重定向。
    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多