Prevención de caché en el botón de retroceso en Safari 5

A partir de safari reciente 5 fue lanzado, y resulta causar algunos problemas para mi sitio web. Tengo un sitio web dynamic con ASP clásico (aunque eso no debería importar mucho) y el sitio tiene un uso creativo de la stack de historial. Por ejemplo, puede estar en una página que enumera productos, luego vaya a detalles sobre un producto y cambie el producto (vista de administrador). Cuando hace clic en guardar en el producto, la información se envía al servidor a través de AJAX y se emite un history.back() . Esto funciona muy bien en todos los navegadores (incluido safari <= 4), sin embargo, en el safari recién lanzado 5 dejó de funcionar. Parece que cuando haces clic en Safari 5 no actualiza la página, solo la carga desde la memoria caché, lo que significa que no se muestran los cambios realizados en la vista de detalles. ¿Cómo puedo hacer para que esto funcione en Safari 5 también? Este es el código actual que tengo que desactivar el almacenamiento en caché (incluido en la parte superior de cada página):

 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() 

El controlador de unload vacía ya no funcionará. En su lugar, puede verificar la propiedad persisted del evento onpageshow . Se establece en falso en la carga de la página inicial. Cuando la página se carga desde bfcache, se establece en verdadero.

La solución de Kludgish es forzar una recarga cuando la página se carga desde bfcache.

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

Si está utilizando jQuery, haga lo siguiente:

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

Después de algunos problemas y excavaciones encontré una solución, aunque no estoy muy contento con eso. La configuración de onunload="" en la etiqueta de cuerpo hace que Safari invalide la página y la vuelva a cargar. window.history.back(); .

Aquí hay otra forma:

  function invalidateBackCache() { // necessary for Safari: mobile & desktop } window.addEventListener("unload", invalidateBackCache, false); 

Elegí seguir esta ruta porque agregar HTML (onunload = “”) a la etiqueta del cuerpo en .Net implicaba modificar tres archivos en mi caso. Establecer el atributo onunload en jQuery tampoco lo resolvió.

Esto también funciona para el móvil Sarfari (iPad).

    Intereting Posts