Safari остается «загруженным», когда window.onbeforeunload возвращает false - PullRequest
5 голосов
/ 22 февраля 2012

Следующая суть: 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 ]

1 голос
/ 04 марта 2012

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

  1. Посетите страницу, о которой идет речь .
  2. Хит перезагрузить.
  3. Нажмите кнопку «Оставаться на странице».

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

  • Когда диалоговое окно закрывается с помощью кнопки «Оставаться на странице», оно оставляет символ остановки X включенным, а процесс загрузки все еще включается и останавливается где-то около 10%.
  • Эта «загрузка» НЕ может быть отменена никакими средствами (клавиатура, кнопка, скрипт).
  • Вкладка «Сеть» в Web Inspector утверждает, что загрузка не происходит.

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

0 голосов
/ 28 февраля 2012

Пожалуйста, смотрите эту страницу-> 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';
};
...