Safari остается "загрузочным", когда окно.onbeforeunload возвращает false


Следующая суть: https://gist.github.com/1876791 (заимствовано из демо в этот вопрос ) это мертвый простой пример использования window.onbeforeunload в js.

Проблема у нас следующая (происходит с Safari 5.1.3 и не последней версией Chrome):

  1. посетите эту страницу: http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm
  2. нажмите на одну из ссылок, вы получите предупреждение, спрашивающее вас, действительно ли вы хотите оставьте эту страницу
  3. Нажмите "Остаться На Странице"
  4. перезагрузите страницу с помощью cmd-R. Вас спросят в другой раз, действительно ли вы хотите покинуть страницу
  5. Нажмите Кнопку "Остаться На Странице".
  6. Safari остается в состоянии "загрузка", а индикатор выполнения показывает, как если бы он должен был загрузить следующую страницу.

Это ошибка из Safari ? Есть ли способ обойти эту проблему ?

2 5

2 ответа:

Я смог воспроизвести эту проблему, даже пропустив шаги 2 и 3 ОП. Любая форма перезагрузки демонстрирует эту проблему. Минималистичные шаги для воспроизведения:

  1. посетитестраницу, о которой идет речь .
  2. хит перезарядки.
  3. Нажмите кнопку "остаться на странице".

Ход загрузки визуально предварительно включается сразу после попадания перезарядки и остается таковым в течение всей жизни диалога подтверждения (по-видимому, в попытке передать"висящий над краем скалы" -тип зрелый ситуации;) однако:

  • когда диалог закрывается кнопкой "остаться на странице", он оставляет символ остановки X включенным, а ход загрузки все еще занят и заморожен где-то около отметки 10%.
  • эту" загрузку " нельзя отменить никакими средствами (клавиатура, кнопка, скрипт).
  • вкладка Network в Web Inspector утверждает, что загрузка не происходит.

Это действительно похоже на ошибку интерфейса Webkit / Safari - похоже, не удается отключить индикатор выполнения в условия пребывания на странице. Лучше всего было бы сообщить об этом командеWebkit или, Поскольку вы испытываете это в Safari, возможно, командаSafari будет лучше.

Пожалуйста, смотрите эту страницу -> https://developer.mozilla.org/en/DOM/window.onbeforeunload

Вы должны обработать событие. Пример на странице работает нормально. Вот код:

window.onbeforeunload = function (e) {
  e = e || window.event;

  // For IE and Firefox prior to version 4
  if (e) {
    e.returnValue = 'Any string';
  }

  // For Safari
  return 'Any string';
};