event enables checking cache application aplicaciones html5 safari offline-browsing

html5 - enables - Una vez que un documento HTML tiene un manifiesto(cache.manifest), ¿cómo puede eliminarlo?



manifest cache manifest (7)

Esto puede ser viejo pero espero que sea útil para alguien.

Eche un vistazo a sus encabezados HTTP en las propiedades de IIS. Eche un vistazo a la habilitación o inhabilitación de la caducidad del contenido. Puede ser que IIS todavía esté haciendo el caché.

Parece que una vez que tienes una entrada de manifiesto, a la:

<html manifest="cache.manifest">

Entonces esa página (la entrada maestra en el caché) siempre se almacenará en caché (al menos por Safari) hasta que el usuario haga algo para eliminar el caché, incluso si luego elimina el atributo de manifiesto de la etiqueta html y actualiza el manifiesto (cambiando algo dentro de él), lo que obliga a que la entrada maestra se vuelva a cargar junto con todo lo demás.

En otras palabras, si tiene:

  • index.html (con manifiesto definido)
  • file1.js (referenciado en manifiesto)
  • file2.js (referenciado en manifiesto)
  • cache.manifest (enumera los dos archivos js)

- la eliminación de la entrada del manifiesto de index.html y la modificación del manifiesto (por lo que el explorador lo vence y todo el contenido recargado) no impedirá que esta página se comporte como si aún estuviera en caché. Si ve el código fuente en index.html, ya no verá el manifiesto en la lista, pero el navegador seguirá solicitando solo el archivo cache.manifest y, a menos que se cambie el contenido del archivo, no se mostrará ningún otro cambio en el archivo. usuario.

Parece un error bastante evidente, y está presente en iOS y en las versiones de Safari para Mac. ¿Alguien ha encontrado una forma de restablecer la página y deshacerse del caché sin requerir la intervención del usuario?


He estado investigando la misma pregunta, y no parece ser una API para:

  1. activar dinámicamente que una página se almacena en caché
  2. Hacer que una página deje de ser cacheada dinámicamente.

Aquí están los mejores recursos que he encontrado:

http://www.html5rocks.com/tutorials/appcache/beginner/

http://www.thecssninja.com/javascript/how-to-create-offline-webapps-on-the-iphone

En particular, esta cita del primer enlace:

Si el archivo de manifiesto o un recurso especificado en él no se descarga, la actualización completa falla. El navegador continuará utilizando la memoria caché de la aplicación anterior en caso de que se produzca una falla.

De lo contrario, no se menciona en ningún lugar la descarga del caché.

Parece sugerir que no puede forzar un error para desagruparlo. Sin embargo, como se indica a continuación, la especificación sugiere que si se produce un error al descargar el archivo de manifiesto, se eliminará toda la memoria caché.

En google chrome, el usuario puede ir a la siguiente URL:

chrome: // appcache-internals /

Y desactivar manualmente el caché. Por supuesto, la próxima vez que visiten la página, se volverá a vincular si la página tiene el conjunto de propiedades del manifiesto.

Si nos fijamos en la especificación: 5.6 aplicaciones web sin conexión

Parece sugerir una situación donde el caché se elimina. Específicamente, la sección 5.6.4.5:

Si la recuperación del manifiesto falla debido a una respuesta 404 o 410 o equivalente, ejecute estos pasos: Marque el grupo de caché como obsoleto. Este grupo de caché ya no existe para ningún otro propósito que no sea el procesamiento de objetos de documento ya asociados con un caché de aplicación en el grupo de caché. Si el grupo de caché tiene un caché de aplicación cuyo indicador de integridad está incompleto, descarte el caché de la aplicación.

Luego dice:

Si esto fue un intento de caché, descartar el grupo de caché por completo.

Básicamente, si la solicitud del archivo de manifiesto de caché da como resultado un 404, entonces se debe descartar todo el caché. Entonces, ¿ha intentado que el servidor devuelva un 404 o 410 cuando se solicita el archivo de manifiesto de caché? Eso debería funcionar. El truco es devolver solo el 404/410 para las páginas de las que desea eliminar el manifiesto (¿quizás utilizando parámetros de url?).


Lo que hacemos es eliminar la lista de archivos en el manifiesto, por lo que se destaca que NO se almacenará en caché ningún archivo.

Funciona para nosotros.


Trate de simplemente eliminar el archivo de manifiesto. De los documentos de mozzila:

Los cachés de aplicaciones también pueden volverse obsoletos. Si el manifiesto se elimina del servidor, el navegador elimina todos los cachés de aplicaciones que usan ese manifiesto, luego envía un evento "obsoleto" al objeto de caché de la aplicación. A continuación, el estado de la caché de la aplicación se establece en OBSOLETO.

Esto también me funcionó en cromo.


Una posible solución:

  • Modificar el manifiesto (para que se vuelva a cargar).
  • modifique el archivo maestro (index.html) para hacer referencia a un manifiesto no existente, de modo que obtenga un 404

Apenas elegante, pero parece funcionar. El problema principal entonces es que está atascado con esta entrada de manifiesto falso que genera 404 hasta que todos los que alguna vez han estado en su sitio hayan regresado y hayan borrado su caché.

Tiene que haber una mejor manera...


Una solución, si está utilizando IIS 7 es eliminar el Tipo Mime para el tipo de archivo .manifest o .appcache que agregó para habilitar el almacenamiento en caché. Siempre puede volver a agregar esto cuando desee habilitar el almacenamiento en caché nuevamente. Esto es lo que hice para arreglar el mío.


Para propósitos de desarrollo (cambios constantes), lo que hemos hecho es:

  1. Establezca un archivo de manifiesto de caché en su lenguaje de SERVIDOR, por ejemplo, usamos PHP, por lo que nuestro caché de desarrollo se llama "cache.manifest.php" y se señala de la misma manera en la etiqueta html como esta:

    <html manifest="cache.manifest.php">

  2. Coloque alguna cadena dependiente del tiempo (u otra cosa que lo combine) en algún lugar de su manifiesto como un comentario (# ---), para que el archivo sea diferente de vez en cuando (los navegadores parecen comparar el contenido del manifiesto, no la fecha) ), por ejemplo, esta cadena cambia el manifiesto cada minuto, de esta manera todos los archivos se volverán a almacenar en caché si la visita es en un minuto diferente como la última vez.

    <?php if($dev) echo date("Y-m-d H:m"); ?>

Acabamos de probar este procedimiento utilizando Chrome, espero que funcione en otros, pero si no, sus comentarios y consejos serían muy apreciados.