Хотите вызвать функционал на window.onbeforeunload - PullRequest
0 голосов
/ 14 марта 2012

Мне нужно вызвать функциональность в window.onbeforeunload, как показано ниже,

    window.onbeforeunload = function() {
        getMyApp("mySwf").cancelFunction(); 
  }

Но проблема в том, что окно закрывается до вызова функциональности. Может ли кто-нибудь помочь решить эту проблему?

1 Ответ

0 голосов
/ 14 марта 2012

Если выполняемое вами действие выполняется синхронно в обработчике onbeforeunload, то, похоже, оно работает.Браузер выполняет ваше действие и затем закрывается.

Если действие асинхронное, то есть вы запускаете событие, которое обрабатывается в другом потоке, или вы устанавливаете таймер для запуска позже, то, скорее всего, оно будет проигнорировано, потому чтоокно отправляет событие и закрывается немедленно.(Между прочим, если вы говорите с плагином, действие, которое выглядит синхронно в вашем коде, может быть реализовано в плагине асинхронно, в целях стабильности или чего-либо еще.)

Один из вариантов -отобразить всплывающее сообщение в обработчике onbeforeunload и надеяться, что выполняемое вами действие будет выполнено, пока пользователь просматривает сообщение.

window.onbeforeunload = function() {
    getMyApp("mySwf").cancelFunction(); 
    alert("Please wait while the file is saved.");
}

Другой способ - предотвратить закрытие окна.Единственный способ сделать это в веб-браузере - это открыть диалоговое окно подтверждения.Некоторые части диалогового сообщения предопределены браузером, но вы можете добавить часть своего текста.Пользователь в любом случае сможет закрыть окно, но вы можете рекомендовать не закрывать его.Также может случиться, что ваша задача, даже если она асинхронная, будет выполнена, пока пользователь просматривает сообщение.

Чтобы отобразить предварительно заданное диалоговое окно подтверждения:

window.onbeforeunload = function() {
    getMyApp("mySwf").cancelFunction(); 
    event.returnValue=true;                // display confirmation message
}

Чтобы отобразить диалоговое окно подтвержденияс добавлением вашего текста:

window.onbeforeunload = function() {
    getMyApp("mySwf").cancelFunction(); 
    event.returnValue="If you close the window, unsaved edits will be lost.";
}

После того, как вы запустили действие, вы можете закрыть окно программным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...