Предотвращение обновления / перезагрузки страницы с помощью JavaScript

#javascript #event-handling #refresh

#javascript #обработка событий #обновить

Вопрос:

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

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

Возможно ли это? Я обработал клавишу F5, но мне также нравится предотвращать обновление с помощью кнопки.

Комментарии:

1. Это звучит как (к сожалению) случай для onbeforeunload события. Вы можете использовать его, чтобы запросить пользователя и спросить, не хочет ли он покинуть страницу (обновление считается «уходом» со страницы).

2. Вы не можете и не должны переопределять поведение, которое пользователь ожидает от браузера. Если вам нужна функция «обновить» в вашем приложении, которая работает иначе, чем обычная функциональность кнопки обновления, создайте кнопку обновления в пользовательском интерфейсе вашего приложения. Это очень распространенное явление (см., например, Gmail), и пользователи поймут его гораздо лучше, чем если вы попытаетесь переопределить ожидаемое поведение их браузера.

3. @MattMcDonald Да, я знаю, но я не хочу спрашивать пользователя, просто обновите iframe и отмените событие обновления страницы.

4. @Джордан ну, это неплохой вариант. Спасибо. Ожидайте больше комментариев, на всякий случай.

5. Если вы считаете, что всплывающие окна раздражают, представьте, что произойдет в мире, где можно запретить перенаправление страницы подобным образом.

Ответ №1:

ОБНОВЛЕНИЕ: я написал это 5 лет назад, сейчас браузеры делают разные вещи, вы все равно можете использовать это для тестирования своего набора браузеров, но ваш опыт может отличаться от моего старого исследования.

Экспериментирую с использованием jQuery, потому что я ленив.

Теоретически, предотвращение поведения по умолчанию должно помешать событию делать то, что оно должно делать. Это не работает с событиями в моем примере и дает разные результаты в разных браузерах. Я ввел Math.random(), чтобы определить, была ли страница перезагружена или нет. Поскольку разные браузеры выполняют разные действия, я настоятельно рекомендую НЕ использовать это в производственной среде.

 <body>
<p></p>
<script type="text/javascript">
    $('p').append(Math.random());

    $(window).bind({
        beforeunload: function(ev) {
            ev.preventDefault();
        },
        unload: function(ev) {
            ev.preventDefault();
        }
    });
</script>
</body>
 

С помощью CTRL-R или F5 или кнопки перезагрузки:

  • Safari: ничего не делает
  • Chrome: ничего не делает
  • Opera 10 и 11: ничего не делает
  • Firefox 7.x: показывает специальное приглашение с двумя кнопками:
    • Оставаться на странице — не перезагружает страницу
    • Оставить страницу — перезагружает страницу
  • IE7 и IE8: показывает приглашение с двумя кнопками:
    • OK — Перезагрузка страницы
    • Отмена — не перезагружает страницу
  • IE9: показывает приглашение с двумя кнопками:
    • Покинуть эту страницу — перезагружается
    • Оставаться на этой странице — не перезагружается

Подсказка Firefox (вы можете сказать, что я тестировал его на Mac)

Приглашение Firefox

Подсказка IE7 и IE8

Подсказка IE7 и IE8

Запрос IE9

Запрос IE9

В заключение:

Да, я не тестировал IE6, я удалил свою виртуальную машину, на которой она была установлена, у меня нет виртуальной машины с установленной бета-версией IE10, так что вам тоже не повезло.

Вы также можете поэкспериментировать с cancelBubble и stopPropagation или, возможно, вернуть false; может быть, обнаружится что-то полезное. Я согласен с ответом Джордана о том, что вам не следует пытаться переопределить значения по умолчанию, поэтому я завершаю свой эксперимент на этом.

Комментарии:

1. Прочитайте эту статью о MDN о preventDefault() developer.mozilla.org/en/DOM/event.preventDefault

2. я пробовал с помощью jquery в jsfiddle. net и кнопка обновления в Chrome, похоже, не заботились об этом коде jquery….

3. Это не работало в Chrome, когда я его писал. Предположительно, это работает в различных браузерах. code-maven.com/prevent-leaving-the-page-using-plain-javascript

Ответ №2:

Возврат false в событии onsubmit предотвращает отправку формы и остается на той же странице без какого-либо взаимодействия с пользователем..

Например..

когда форма, имеющая поле ввода, пуста и отправила эту проверку javascript на проверку и возвращает соответствующий результат.. Если возвращается значение false, ничего не делается (т.е. Страница не обновляется и не перенаправляется)..

Если проверка прошла нормально и если возвращено значение true, выполняется действие формы..

 function validateForm(Str) {
mystring=document.getElementById('inputid').value; 
  if(!mystring.match(/S/)){
    alert ('Please Enter a String.Field cannot be empty');
  return false;
  }else{
    return true;
  }
}