У меня есть эта раздражающая проблема с Safari 6, каждый раз, когда я возвращаюсь назад или вперед (обе кнопки панели инструментов или два певца), вкладка обновляется. Вот короткое видео, иллюстрирующее проблему: https://dl.dropbox.com/u/3257155/safari-refresh.mov
Обычно я не возражал бы, со временем это как бы приросло ко мне (я не уверен, что это началось, когда я обновился до Safari 6 или до Mountain Lion — между обновлениями прошло около недели), но мой клиент обнаружил ошибка в веб-приложении, которое я создаю (некоторые кнопки перестают реагировать, когда он возвращается — он все еще на Lion), и я не могу воспроизвести проблему, потому что мой Safari каждый раз обновлялся.
Итак, мой вопрос: каково нормальное поведение Safari? И как/если я могу заставить Safari не обновляться?
Оказывается, проблема заключалась в том, что Safari (по умолчанию) не запускает onLoad даже при «обратном действии». Я не смог воспроизвести ошибку на своем компьютере, потому что, видимо, расширение 1password вызывает событие onLoad, даже когда вы возвращаетесь назад.
Оказывается, проблема заключалась в том, что Safari (по умолчанию) не запускает onLoad, даже когда выполняется «обратное действие» (с помощью кнопки «Назад» или смахивания двумя пальцами), но я не смог воспроизвести ошибку на своем компьютере, потому что, по-видимому, расширение 1password вызывает событие onLoad, даже когда вы возвращаетесь назад.
Итак, давайте предположим, что этот код на всех страницах:
$(document).ready(function () {
alert('test');
}
И такая последовательность действий:
Safari не будет отображать предупреждение после шагов 3 и 4, поэтому событие onLoad не запускается, а страница .js продолжает выполнение с того места, где оно было остановлено, когда вы ушли со страницы.
Также в текущей версии 6.0.3 расширение 1password (3.9.14), по-видимому, не влияет на это поведение.
Надеюсь, это поможет. В большинстве случаев это не имеет значения, только когда вы пишете плохой код (как это было), он укусит вас за задницу :)
Хотя визуально это выглядит так, как будто страница обновляется, если исходный ответ имел соответствующие заголовки кеша, он будет обслуживаться из кеша, и до тех пор, пока кеш не устареет, на сервер не будет поступать никаких запросов.
Во время тестирования я столкнулся с проблемой, когда веб-инспектор Safari, похоже, неправильно указывает, была ли страница загружена из кеша, но при мониторинге журналов моего сервера выяснилось, что Safari все-таки учитывает отправленные обратно заголовки кеша.
Когда сервер отправляет заголовки, запрещающие кеширование с ответом, или срок действия кеша тем временем истек, Safari, как и любой другой браузер, сделает новый запрос при повторном посещении страницы из истории.
Также обратите внимание, что вы можете полностью отключить кэширование в меню «Разработка» (если оно включено). Убедитесь, что вы не включили эту опцию.
Стью Уилсон
Дэн Ф.
Стью Уилсон
Ленар Хойт
Ленар Хойт
Оказывать
Ленар Хойт