javascript предупреждение на window.unload, когато браузърът е затворен, но не трябва да предупреждава, когато браузърът се опреснява

Искам да изскача съобщение в събитие window.onunload.

В момента, когато потребител

a) навигира
b) затваря прозореца
c) натиска F5 или
d) натиска бутона за опресняване в лентата с инструменти на браузъра

предупреждението ще се появи.

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

Добавихме условия за липса на предупреждение, когато потребителите натиснат F5 или навигират, но предупреждението също не трябва да се появява, когато потребителите кликнат върху бутона за опресняване на браузъра.

Всеки тип заобиколни решения би бил добър.


person Jayapal Chandran    schedule 17.06.2011    source източник
comment
Ами доколкото знам, това не е възможно. Въпреки че, ако споделите причината, поради която имате нужда от него, същото може да бъде изпълнено с по-добро решение.   -  person mihsathe    schedule 17.06.2011
comment
Хм? 2 и 3 нямат смисъл. Предупреждавайте, когато потребителят натисне бутона за опресняване в лентата с инструменти на браузъра, но НЕ предупреждавайте, когато потребителят щракне върху бутона за опресняване на лентата с инструменти на браузъра... ???   -  person mplungjan    schedule 17.06.2011
comment
^Ами всичко, което той има предвид е, че иска предупреждението да се показва във всички случаи на разтоварване, освен при щракване върху бутона за опресняване. Езикът обаче е объркващ.   -  person mihsathe    schedule 17.06.2011
comment
Редактирах въпроса ви - уведомете ме дали съм го формулирал правилно   -  person mplungjan    schedule 17.06.2011


Отговори (1)


Мога да предложа начин да разбера дали потребителят е щракнал върху бутон на браузъра (назад, напред, затваряне на браузъра и т.н.). Не можах да намеря начин да разбера кой бутон е щракнат, но се надявам, че ще ви помогне.

За да разберете дали потребителят е щракнал върху бутон на браузъра, изпълнете следните стъпки: 1. Регистрирайте събитие window.beforeunload. 2. В манипулатора проверете event.clientY. 3. Ако event.clientY не е defiend или event.clientY‹0, тогава знаете, че потребителят е щракнал върху бутон на браузъра.

Например:
(Вероятно ще трябва да промените кода, за да го напаснете към вашия проблем)

function beforeUnloadHandler(eventArg)
{
   var _e = window.event || eventArg;

   // browser button click
   if (isNaN(_e.clientY) || _e.clientY < 0) 
   {
       // unload process will continue
       // and unload event will be fired
       return;
   }

   // a confirmation with 'test alert' text will appear
   // if the user clicks 'Cancel', the unload process will stop 
   // and unload event won't be fired.
   return "test alert";
}
window.onbeforeunload = beforeUnloadHandler;

Този код ще работи във всички основни браузъри: chrome, ff, ie9,ie8,ie7,ie6, opera 11, opera 10, safari 3,4,5.

person Omeriko    schedule 17.06.2011