Подтвердить что ты не робот

Предотвращение кэширования на задней панели в Safari 5

По состоянию на недавнее сафари 5 было выпущено, и это, как оказалось, вызывает некоторые проблемы для моего сайта. У меня есть динамический веб-сайт с классическим ASP (хотя это не имеет большого значения), и на сайте есть творческое использование стека истории. Например, вы можете быть на странице, в которой перечислены продукты, а затем перейти к подробностям о продукте и изменить продукт (admin-view). Когда вы нажимаете "Сохранить" на продукте, информация отправляется на сервер через AJAX, и выдается history.back(). Это отлично работает во всех браузерах (включая сафари <= 4), однако в недавно выпущенном сафари 5 он перестает работать. Кажется, что при нажатии на сафари 5 он фактически не обновляет страницу, он загружает ее только из кеша, а это значит, что изменения, сделанные в представлении деталей, не отображаются. Как я могу продолжить эту работу в сафари 5? Это текущий код, который я должен отключить кеширование (включено в начало каждой страницы):

Dim pStr
pStr = "private, no-cache, no-store, must-revalidate"
Response.AddHeader "pragma","no-cache"      '?
Response.AddHeader "cache-control", pStr    '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "cache-control", "post-check=0, pre-check=0"     '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"       '?
Response.AddHeader "Last-Modified", Now()
4b9b3361

Ответ 1

Пустой обработчик unload больше не будет работать. Вместо этого вы можете проверить свойство persisted события onpageshow. Он установлен на значение false при начальной загрузке страницы. Когда страница загружается из bfcache, она имеет значение true.

Решение Kludgish - это принудительное перезагрузку при загрузке страницы из bfcache.

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

Если вы используете jQuery, выполните следующие действия:

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
        window.location.reload() 
    }
});

Ответ 2

После некоторых googeling и рытья я нашел решение, хотя я не слишком доволен этим. Установка onunload="" в теге body вызывает Safari для отмены страницы и перезагрузки вверх window.history.back();.

Ответ 3

Здесь другой способ:

    function invalidateBackCache() {
        // necessary for Safari: mobile & desktop
    }

    window.addEventListener("unload", invalidateBackCache, false);

Я выбрал этот маршрут, потому что добавление HTML (onunload = "") в тег body в .Net включало изменение трех файлов в моем случае. Установка атрибута onunload в jQuery также не решила его.

Это работает и для мобильного Sarfari (iPad).