Safari 6 обновляется, когда я возвращаюсь

У меня есть эта раздражающая проблема с Safari 6, каждый раз, когда я возвращаюсь назад или вперед (обе кнопки панели инструментов или два певца), вкладка обновляется. Вот короткое видео, иллюстрирующее проблему: https://dl.dropbox.com/u/3257155/safari-refresh.mov

Обычно я не возражал бы, со временем это как бы приросло ко мне (я не уверен, что это началось, когда я обновился до Safari 6 или до Mountain Lion — между обновлениями прошло около недели), но мой клиент обнаружил ошибка в веб-приложении, которое я создаю (некоторые кнопки перестают реагировать, когда он возвращается — он все еще на Lion), и я не могу воспроизвести проблему, потому что мой Safari каждый раз обновлялся.

Итак, мой вопрос: каково нормальное поведение Safari? И как/если я могу заставить Safari не обновляться?

ОБНОВЛЯТЬ

Оказывается, проблема заключалась в том, что Safari (по умолчанию) не запускает onLoad даже при «обратном действии». Я не смог воспроизвести ошибку на своем компьютере, потому что, видимо, расширение 1password вызывает событие onLoad, даже когда вы возвращаетесь назад.

вы отключили кеш в сафари? Я только что проверил то же самое с Safari 6 на ML, и он не обновляет страницу в нормальных условиях, т.е. он обслуживает кешированную версию в пределах обычных параметров управления кешем.
Нет, я не отключал кеши (из меню «Разработка» или иным образом)
Опубликуйте свое обновление в качестве ответа и примите его, оно достаточно интересно, чтобы быть полезным для кого-то еще в будущем.
У меня нет 1password на моей машине, и проблема все еще существует. :(
Похоже, что на некоторых компьютерах возникает проблема с многопоточными окнами Safari: обсуждения.apple.com /thread/4161818?start=45&tstart=0
@mcb Вам удалось решить проблему? У меня все еще есть, и это раздражает.
@Render: мне не нравится Google, поэтому я переключился на Firefox.

Ответы (2)

Оказывается, проблема заключалась в том, что Safari (по умолчанию) не запускает onLoad, даже когда выполняется «обратное действие» (с помощью кнопки «Назад» или смахивания двумя пальцами), но я не смог воспроизвести ошибку на своем компьютере, потому что, по-видимому, расширение 1password вызывает событие onLoad, даже когда вы возвращаетесь назад.


Дальнейшие пояснения по просьбе Рендера:

Итак, давайте предположим, что этот код на всех страницах:

$(document).ready(function () {
    alert('test');
}

И такая последовательность действий:

  1. открыть страницу-1.html
  2. открыть страницу-2.html
  3. Возвращаться
  4. Иди вперед

Safari не будет отображать предупреждение после шагов 3 и 4, поэтому событие onLoad не запускается, а страница .js продолжает выполнение с того места, где оно было остановлено, когда вы ушли со страницы.

Также в текущей версии 6.0.3 расширение 1password (3.9.14), по-видимому, не влияет на это поведение.

Надеюсь, это поможет. В большинстве случаев это не имеет значения, только когда вы пишете плохой код (как это было), он укусит вас за задницу :)

Что ты имеешь в виду ? Это не имело для меня смысла, можете ли вы уточнить?

Хотя визуально это выглядит так, как будто страница обновляется, если исходный ответ имел соответствующие заголовки кеша, он будет обслуживаться из кеша, и до тех пор, пока кеш не устареет, на сервер не будет поступать никаких запросов.

Во время тестирования я столкнулся с проблемой, когда веб-инспектор Safari, похоже, неправильно указывает, была ли страница загружена из кеша, но при мониторинге журналов моего сервера выяснилось, что Safari все-таки учитывает отправленные обратно заголовки кеша.

Когда сервер отправляет заголовки, запрещающие кеширование с ответом, или срок действия кеша тем временем истек, Safari, как и любой другой браузер, сделает новый запрос при повторном посещении страницы из истории.

Также обратите внимание, что вы можете полностью отключить кэширование в меню «Разработка» (если оно включено). Убедитесь, что вы не включили эту опцию.

введите описание изображения здесь

Кэши автоматически повторно включаются при перезапуске Safari, поэтому, если он никогда не закрывает Safari, это не будет основной причиной.