2016-04-11 1 views
2

Мой код работает хорошо, но мне не нужно это «предупреждение beforeunload», когда reloadind же странице (Reload кнопку Ou клавишу F5), или когда нажмите на «назад» кнопку ...Как отключить предупреждение «onbeforeunload» при «перезагрузке» одной и той же страницы?

Мой первоначальный рабочий код:

<script> 
    window.onbeforeunload = function (e) { 
     var msg = '\n\n\nARE YOU SURE?\n\n\n'; 
     e = e || window.event; 

     if (e) 
      e.returnValue = msg; 
     //some extra conditions 
     document.getElementById("popUpOut").style.display = 'block'; 
     return msg; 
    } 
</script> 

Итак, это мой вопрос: Как отключить beforeunload в этих ситуациях (кнопку «назад» и «перезагрузки страницы)

+2

Что такое прецедент? Единственные действительно действительные случаи использования, которые приходят на ум для «onbeforeunload», одинаково применимы к перезагрузке той же страницы, что и в другом месте. –

+0

Вы не должны знать, к какой странице вы идете. Так что это невозможно. – Tim

+0

Спасибо за внимание! Так вот, вот и все! ** перезагрузка ** «та же самая страница» (кнопка F5 или перезагрузка) ИЛИ кнопка возврата назад (этот последний запрос является запросом клиента) –

ответ

1

Вы не можете сделать это на странице. обновление похоже на навигацию и разгрузку DO M, поэтому событие onbeforeunload всегда будет вызываться, но вы можете предотвратить его использование jquery для клавиш, нажатых для Ctrl + R или F5 и Backspace.

Для Ctrl + R используйте:

$(document).keydown(function (e) { 
    if (e.keyCode == 65 && e.ctrlKey) { 
     e.preventDefault(); 
    } 
}); 

Для использования F5 это:

$(document).keydown(function (e) { 
    if (e.which || e.keyCode) == 116) { 
     e.preventDefault(); 
    } 
}); 
+1

Отредактированный мой ответ выше –

+1

Это то, что я сказал в своем ответе, ВЫ НЕ МОЖЕТЕ отключить кнопку перезагрузки в браузере и на кнопке «Назад», потому что обновление страницы похоже на навигацию и разгружать DOM, поэтому всегда будет вызываться событие onbeforeunload. Вы можете просто предотвратить кнопки, которые я сказал. Я рад, что это вам помогло, но было бы очень приятно, если бы вы проголосовали за мой ответ как правильный, если это действительно помогло вам. –

+0

Как вы можете видеть, можно «управлять» BACK BUTTON ... теперь я пытаюсь слушать кнопки RELOAD и GO ... Я получаю эту информацию от http://dotnsf.blog.jp/archives/ 1012215593.html и отсюда http: //www.thecssninja.com/javascript/stealing-history-api .... –

0

Прежде всего, позвольте мне сказать, что, "" Я не хочу "" прекратить перезагрузки страница! BUT controll the beforeunload сообщение!

Так что, если вы позволите, я попытаюсь объяснить:

  • A) Я просто хочу сделать РЕШАТЬ в этом случае я показываю (или нет) «предупреждение выхода сообщение»

Насколько мне известно, «невозможно» контролировать событие UnbeforeUnload, я делаю некоторые тесты, и в зависимости от браузера это возможно, но это «рабочий перегрев»

Так что я знаю это :

  • 1) прослушивание клавиатуры очень просто «выбрать событие», а то, что я хочу, показывать в «предупреждающем мясе» для каждого.
  • 2) Прослушивание истории Я могу выбрать, что происходит на «Навигаторе Назад кнопка», dand сделать то же самое.
  • 3) Код ниже штрафа в темэ работает ...

И управлять клавиатурой, у меня есть, очень простой код в JS:

document.onkeydown = KeyCheck; 
function KeyCheck(e) { 
    var key = (window.event) ? event.keyCode : e.keyCode; 
    if(key==116) {flag_beforeunload=false;}  
    if(key==8) {flag_beforeunload=false;}  
    if (e.keyCode == 82 && e.ctrlKey) {flag_beforeunload=false;}   

    document.getElementById("container").innerHTML = "key = "+key + " - " + flag_beforeunload; 
} 


window.onbeforeunload = function(e){ 
    var msg = 'You are sure to exit?'; 
    e = e || window.event; 

    if(e) 
     if (flag_beforeunload == true) { 

      return msg; 
     } 
} 

Ниже, here (dotnsf site) где я получите код для управления кнопкой «назад» браузера и «... я могу даже отключить.

но ан Jquery, следуя мой код, но в JS:

window.onpopstate = function(event) { 

window.history.back(-1) 


      if(!event.state){ 
      //the to lines below, disable the back button 
       // history.pushState("nohb", null, ""); 
       // return; 

       // the following line iIcan use to control the envent, in UnBeforeUnload 
       // flag_beforeunload=false; 

      } 
    } 
} 

И, наконец, это мой вопрос: я apreciate больше помощи, и решения для других навигаторов, чем Chrome!

Большое спасибо!