Una vez que un documento HTML tiene un manifiesto (cache.manifest), ¿cómo se puede quitarlo?

StackOverflow https://stackoverflow.com/questions/4542299

  •  13-10-2019
  •  | 
  •  

Pregunta

Parece que una vez que tenga una entrada de manifiesto, al estilo de:

<html manifest="cache.manifest">

Luego de que siempre se almacenan en caché la página (la entrada principal en la memoria caché) (al menos por Safari) hasta que el usuario haga algo para eliminar la caché, incluso si más adelante quita el atributo de manifiesto a partir de la etiqueta html y actualizar el manifiesto (cambiando algo en su interior), forzando la entrada principal que volver a cargar con todo lo demás.

En otras palabras, si usted tiene:

  • index.html (con definido manifiesto)
  • file1.js (referenciados en el manifiesto)
  • file2.js (referenciados en el manifiesto)
  • cache.manifest (listas de los dos js archivos)

- la supresión de la entrada de manifiesto a partir index.html y modificar el manifiesto (por lo que se venció por el navegador y vuelve a cargar todo el contenido) no se detendrá esta página se comporte como si estuviera todavía plenamente en caché. Si ve la fuente sobre index.html no podrá ver el manifiesto que figuran más, pero el navegador seguirá solicitar sólo el archivo de cache.manifest, ya menos que se cambie el contenido de ese archivo, no hay otros cambios en los archivos se mostrará a la usuario.

Parece como un bicho bastante deslumbrante, y está presente en iOS, así como versiones para Mac de Safari. Alguien ha encontrado una manera de reajustar la página y deshacerse de la caché sin requerir la intervención del usuario?

¿Fue útil?

Solución

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

  1. gatillo dinámicamente una página que está almacenado en caché
  2. dinámicamente una página causa para dejar de ser almacenado en caché.

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

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

http://www.thecssninja.com/javascript/how -to-crear-offline-webapps-en-el-iphone

En particular, esta cita del primer enlace:

Si el archivo de manifiesto o un recurso especificado en no se descarga correctamente, toda la actualización falla. El navegador seguirá utilizando la antigua caché de la aplicación en el caso de fallo de un ejemplo.

De lo contrario, no hay mención alguna acerca de la descarga de la memoria caché.

parece sugerir que no se puede forzar un error de conseguir que uncache. Sin embargo, como se señala más adelante, 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 la caché. Por supuesto, la próxima vez que visita la página, se recached si la página tiene el conjunto de propiedades manifiesto.

Si nos fijamos en la especificación: 5.6

Parece sugerir una situación en la que se elimina la memoria caché. Específicamente, la sección 5.6.4.5:

Si ir a buscar el manifiesto falla debido a una respuesta 404 o 410 o equivalente, a continuación, ejecutar estas subetapas: grupo caché Marcar como obsoleta. Este grupo de caché ya no existe para ningún otro propósito que el procesamiento de objetos de documento ya se asocia con un caché de la aplicación en el grupo de caché. Si el grupo de caché tiene un caché de la aplicación cuyo pabellón completo está incompleta, luego descarta que la caché de la aplicación.

A continuación, dice:

Si se trataba de un intento de caché, caché grupo de descarte por completo.

Básicamente, si la solicitud de los resultados de caché archivo de manifiesto en un 404, a continuación, toda la memoria caché debe ser desechada. Por lo tanto, ¿ha tratado de que el servidor devuelve un 404 o 410 cuando se solicita el archivo de manifiesto de caché? Eso debería funcionar. El truco es sólo para volver 404/410 para las páginas que desea eliminar el manifiesto a partir de (tal vez usando parámetros de URL?).

Otros consejos

Una posible solución:

  • modificar el manifiesto (por lo que se vuelve a cargar)
  • modificar el archivo maestro (index.html) para hacer referencia a un manifiesto inexistente, por lo que consigue un 404

Apenas elegante, pero parece que funciona. El principal problema es que luego le pegan con este 404 de generación de entrada de manifiesto falsa hasta que todos los que han estado alguna vez en su sitio ha regresado y tenía su caché se aclaró.

Tiene que haber una mejor manera ...

Trate simplemente borrar el archivo de manifiesto. A partir de los documentos Mozzila:

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

Esto también trabajó para mí en el cromo.

Una solución, si está utilizando IIS 7 es eliminar el tipo MIME para el .manifest o .appcache tipo de archivo que ha agregado para permitir el almacenamiento en caché. Siempre se puede añadir este nuevo cuando desea activar nuevamente el almacenamiento en caché. Esto es lo que hice para fijar la mía.

Lo que hacemos es borrar la lista de archivos en el manifiesto, lo que se destaca se almacenan en caché de archivos NO.

Se trabaja para nosotros.

Esto puede ser viejo, pero espero que todavía útil a alguien.

Tome un vistazo a su cabeceras HTTP en las propiedades de IIS. Echar un vistazo a cómo activar o desactivar la caducidad del contenido. Podría ser que IIS sigue haciendo la caché.

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

  1. Configurar un -cache manifiesta Archivo- debajo de la lengua del lado del servidor, por ejemplo, usamos PHP, por lo que nuestra memoria caché de desarrollo se llama "cache.manifest.php" y se señaló esta misma manera en la etiqueta html de esta manera:

    <html manifest="cache.manifest.php">
    
  2. Ponga un trozo de cuerda dependiente- -tiempo (u otra cosa que se adapte a usted) en algún lugar de su manifiesta como un comentario (# ---), por lo que el archivo es diferente cada vez en cuando (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 serían re-caché si la visita es de una hora diferente que la última vez.

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

Acabamos probado este procedimiento usando Chrome, espero que funcione en otros, pero si no sus comentarios y consejos serían muy bien apreciados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top