Делать некоторые вещи прямо перед тем, как пользователь покинет страницу - PullRequest
0 голосов
/ 15 марта 2010

Я видел здесь несколько вопросов относительно того, чего я хочу достичь, и основал то, что у меня пока есть, на этих ответах. Но есть небольшое неправильное поведение, которое все еще раздражает меня.

То, что у меня есть, это своего рода функция восстановления. Всякий раз, когда вы вводите текст, клиент отправляет запрос синхронизации на сервер каждые 45 секунд. Это делает 2 вещи. Во-первых, это продлевает срок аренды, который клиент имеет в записи (только один человек может редактировать одновременно) еще на 60 секунд. Во-вторых, он отправляет набранный до сих пор текст на сервер в случае сбоя сервера, сбоя подключения к Интернету и т. Д. В этом случае при следующем входе пользователя в наше приложение пользователь получает уведомление о том, что что-то пошло не так и что-то из текста был восстановлен. Подумайте о восстановлении Microsoft или OpenOffice всякий раз, когда они терпят крах!

Конечно, если пользователь добровольно покидает страницу, ему не нужно уведомляться, и в результате восстановление удаляется. Я делаю этот последний запрос через событие beforeunload.

Все шло нормально, пока меня не попросили сделать окончательную настройку ... То же поведение, что и у вас при переполнении стека при выходе из редактора ... диалог подтверждения.

Пока это работает, НО, диалог подтверждения отображается дважды. Вот код.

Событие

if (local.sync.autosave_textelement) {
   window.onbeforeunload = exitConfirm;
}

Функция

function exitConfirm() {
   var local = Core;
   if (confirm('blub?')) {
      local.sync.autosave_destroy = true;
      sync(false);
      return true;
   } else {
      return false;
   }
};

Некоторые проблемы не имеют отношения к разъяснениям:

  • Ядро - это глобальный Объект, который содержит множество переменных, которые используются повсеместно.
  • sync делает запрос ajax. Значения основаны на значениях, которые содержит объект Core.sync. Параметр определяет, будет ли вызов асинхронным (по умолчанию) или синхронизированным.

Редактировать 1

Я пытался разделить обе вещи (удаление восстановления и подтверждение пользователя) на beforeunload и unload. Проблема заключалась в том, что выгрузка слишком поздно. Пользователь получает информацию о восстановлении, даже если оно запланировано для удаления. Если вы обновите страницу через 1 секунду, диалоговое окно исчезнет, ​​поскольку файл будет удален к этому моменту.

1 Ответ

0 голосов
/ 15 марта 2010

Вы пробовали это:

if (local.sync.autosave_textelement) {
   window.onunload = exitConfirm;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...