2008-11-03 33 views

Respuesta

12

Una forma de hacerlo es incluir la hora en que se generó la página en la página y luego usar algunos javascript para comparar la hora local con la hora en que se generó la página. Si el tiempo es diferente para un umbral, entonces la página proviene de un caché. El problema es si la máquina del cliente tiene su hora configurada incorrectamente, aunque puede evitar esto haciendo que el cliente incluya la hora actual del sistema en la solicitud para generar la página y luego envíe ese valor nuevamente al cliente.

+0

maldita sea, me ganaste, ¡aprobado! – Bogdan

+0

Estaba pensando en esta solución. Esperaba algo más fácil en el documento, pero tal vez no exista :) –

+0

Esta no es una buena respuesta si lo que buscas es trabajar con coherencia. Entre los tiempos de carga lenta, la hora local del servidor frente a la hora local del cliente o los clientes con fechas de sistema incorrectas, no hay manera de garantizar la veracidad de esa prueba. –

1

No directamente, algunos navegadores pueden tener algunos comandos personalizados para ello.

Hay una solución que haría lo que desee. Use una cookie para almacenar el timestamp de la primera visita y luego use el META HTTP-EQUIV para establecer el tiempo que el archivo se almacenará en caché (cacheLength). Si la hora actual está dentro del período de timestamp a timestamp+cacheLength, trátela como si se cargaran desde la memoria caché. Una vez que el caché haya expirado, restablezca la hora de la cookie.

2

Usando XmlHttpRequest puede ver la página actual y luego examinar los encabezados http de la respuesta.

Lo mejor es simplemente hacer una solicitud HEAD y luego examinar los encabezados.

Para algunos ejemplos de esta manera echar un vistazo a http://www.jibbering.com/2002/4/httprequest.html

+0

Estaba a punto de sugerir lo mismo, pero la pregunta indica que quiere ver si la página actualmente cargada está en la memoria caché, si desconectas un XHR, entonces eso sería indicativo de la próxima solicitud, no la actual. –

+0

Gracias, no puedo usar esto, pero el enlace que me enviaste me ayuda con otro problema. –

13

Empecé con la respuesta "Daniel" dio anteriormente, pero me temo que con una conexión lenta que podía encontrarse con algunos problemas de latencia.

Aquí está la solución que finalmente funcionó para mí. En el lado del servidor agrego un cookie refCount y establezco su valor en 0. En la carga de documentos en el script java, primero compruebo refCount y luego lo incremento. Al verificar si refCount es mayor que 1, sé que la página está en caché. Entonces, esto funciona como un encanto.

Gracias chicos por llevarme a esta solución.

+3

He usado el mismo enfoque yo mismo. Escribí una descripción detallada en mi blog: http: // monket.net/blog/2010/02/detecting-when-a-page-is-loaded-from-the-browser-cache/ – Karl

3

Si bien esta pregunta ya tiene 4 años. Pensé que agregaría mis 2 centavos usando jQuery y el complemento History.

$(document).ready(function() 
{ 
    $('body').append('<div class="is_cached"></div>'); 
}); 

History.Adapter.bind(window,'statechange',function(){ 
    if($('.is_cached').length >= 1) 
    { 
     alert('this page is cached'); 
    } 
}); 

Cuando se carga el documento por primera vez. Se agrega un nuevo div.is_cached. No hay una forma compatible de ejecutar javascript al cargar una página en caché, pero puede supervisar los cambios en el historial. Cuando el historial cambia y div.is_cached existe, entonces el usuario está viendo un paginado paginado.

+0

¿qué archivos Javascript debo usar para probar esto? Descargué el plugin History pero tiene muchos archivos JS ... ¿cuál está trabajando con esto? –

+0

Utilicé este con jQuery sin ningún problema. https://github.com/balupton/history.js/blob/master/scripts/bundled/html4%2Bhtml5/jquery.history.js – cgTag

+0

Nota: la instrucción IF debería ser> = 1 – cgTag

Cuestiones relacionadas