window.onbeforeunload может запускаться несколько раз

Тот факт, что вы не видите использования функции, не означает, что она бесполезна.

Сеть Stack Exchange, GMail, Grooveshark, Yahoo! Почта, и Hotmail используют приглашение onbeforeunload, чтобы предотвратить / предупредить пользователей о том, что они покидают страницу после того, как начали что-то редактировать. О да, почти каждая программа рабочего стола , которая принимает сохраняемые данные, вводимые пользователем, использует этот шаблон UX «подсказка пользователя перед выходом».


У меня есть функция, которая ведет себя аналогично этой:

window.onbeforeunload = function(){
    // only prompt if the flag has been set... 
    if(promptBeforeLeaving === true){
        return "Are you sure you want to leave this page?";
    }
}

Когда пользователь пытается уйти со страницы, браузер предлагает ему возможность покинуть страницу или остаться на ней. Если пользователь выбирает параметр «Покинуть эту страницу», а затем быстро щелкает ссылку еще раз до того, как страница полностью выгружается, диалоговое окно снова запускается.

Есть ли надежные решения этой проблемы?


Примечание: следующее НЕ решение:

var alreadyPrompted = false;
window.onbeforeunload = function(){
    // only prompt if the flag has been set... 
    if(promptBeforeLeaving === true && alreadyPrompted === false){
        alreadyPrompted = true;
        return "Are you sure you want to leave this page?";
    }
}

, потому что пользователь может выбрать «Оставаться на странице» опция, которая приведет к прекращению работы будущих onbeforeunload .

9
задан David Murdoch 8 November 2010 в 18:44
поделиться