当用户在 beforeunload 上单击 'stay' 时导航到其他页面

Navigate to other page when user clicks 'stay' on beforeunload

我需要一种方法来执行以下操作:

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

我目前有以下代码:

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;

警报 运行 正确,但如果用户单击停留,则尝试导航到另一个页面 运行s beforeonload 再次提示您。这会陷入无限循环,直到您决定离开该页面,然后您将导航到您应该导航到的页面,如果您选择 'stay'。

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

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;