2010-10-19 3 views
1

Я некоторое время искал вокруг и не совсем нашел то, что искал. На моей веб-странице хранятся отчеты, и у пользователя есть возможность сохранять эти отчеты.Подтвердите, что выходите из браузера Exit/On Browser Exit Techniques

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

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

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

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

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

+1

Почему вы не всегда сохраняете, не раздражая пользователя и позволяете легко отменить в следующий раз, когда пользователь отобразит страницу? «Отчет был автоматически сохранен для вас в последний раз, когда вы закрыли страницу [Отменить]» –

+0

Проблема заключается в том, что пользователь может также создавать новые отчеты, а при сохранении должен указывать отчет. Я думал об этом. – Bob

ответ

2

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

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

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

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

+0

Я бы с радостью изменил его на синхронный, если бы функциональность сохранения еще не зависела от других функций. Я думаю, если это единственный способ, я должен изучить изменение кода. – Bob

2
 $(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;} 
Смежные вопросы