Подтверждение выхода из браузера / при выходе из браузера - PullRequest
1 голос
/ 19 октября 2010

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

Я ищу метод, использующий jquery или javascript onunload / onbeforeunload, чтобы спросить пользователя, желает ли он сохранить отчет или продолжить без сохранения, когда браузер закрыт / перемещен из.

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

Сохранение выполняется асинхронно и занимает несколько миллисекунд.

Любые предложения приветствуются.

С уважением, Байрон Кобб.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011
      $(document).ready(function() {
             //below turns off popup on a tags, buttons, :input is for a submit in ie and img tags
             $("a").click(RemoveUnload);
             $("button").click(RemoveUnload);
             $(":input").click(RemoveUnload);
             $("img").click(RemoveUnload);
         });

       RemoveUnload(){window.onbeforeunload = null;}
2 голосов
/ 19 октября 2010

Вероятно, это единственный раз, когда syncronized Ajax-вызов является разумным.

window.onbeforeunload = function(){
   $.ajax({
      url:      'somewhere',
      type:     'POST',
      dataType: 'text',
      async:    false,
      data:     'you_data_here',
      success:  function(data){
      }
   });
};

Таким образом, вы сможете передавать некоторое количество данных на ваш сервер, пока браузер блокирует выгрузку.Это имеет некоторые недостатки.Самое очевидное, что, вероятно, это не так уж и удобно для пользователя, в зависимости от объема передаваемых данных и длительности.
Другой вариант - этот метод недоступен в некоторых (более старых) браузерах.

Хорошийальтернативой может быть автоматическое сохранение ваших данных время от времени или после каждого действия.

...