Passa al contingut principal

Trabaja offline gracias a la API de caché de HTML5

Trabaja offline gracias a la API de caché de HTML5:

HTML5

HTML5 ha abierto las puertas a un nuevo mundo a la hora de que nuestras aplicaciones puedan funcionar de forma desconectada.

En la actualidad, tenemos la posibilidad de almacenar información de forma local a la aplicación mediante los interfaces disponibles con localStorage, Web SQL Database o IndexedDB. Estas características tan interesantes, pueden no ser suficientes si la página en las que se van a implementar no puede ser cargada por el navegador debido a la falta de conectividad.

Es por ello que en la especificación de HTML5, se recogen mecanismos para detallar qué páginas debe cachear nuestro navegador para que estén siempre disponibles y cómo vamos a poder saber en qué modo de trabajo estamos en un momento dado.

Offline Application Caching API

La configuración de los recursos de una aplicación que deben poder ser accedidos cuando no se tiene conexión a Internet, están definidos íntegramente en un fichero llamado Cache Manifest File.

Este fichero de definición permite listar los recursos a registrar por el navegador para ser mostrados cuando pase a modo offline.

Para ello, debemos definir la propiedad manifest a nivel del mismo tag HTML principal, indicando la URL de acceso al fichero de definición de la cache:

<!DOCTYPE html> <html manifest="/cache.manifest"> <head> <meta charset="utf-8" /> </head> <body> <h1>Esta página es offline</h1> </body> </html>

Aunque el fichero puede ser alojando en cualquier URL de nuestro servidor, es muy importante que se sirva con un Content Type adecuado, ya que el tipo esperado será siempre text/cache-manifest.

Si estamos utilizando Apache, es muy probable que tengamos que definir este nuevo tipo de contenido añadiendo la siguiente directiva a la configuración principal del servidor o a un fichero .htaccess:

AddType text/cache-manifest .manifest

El fichero Cache Manifest

El fichero servido deberá comenzar siempre con el texto CACHE MANIFEST en la primera línea, listando a continuación todos los recursos a considerar.

Si alguno de los elementos que hay en la cache puede variar en el tiempo por alguna modificación que debamos realizar, lo más recomendable es añadir al fichero un marca de la versión del mismo para que el navegador pueda detectar que ha cambiado:

CACHE MANIFEST # rev 2 /genbetadev/html5-cache/index.html 

Como aspecto más avanzado, comentar que en este tipo de ficheros podemos definir exclusiones para caracterizar los recursos que siempre tendrán que ser online y no deberían de cachearse:

CACHE MANIFEST # rev 3 images/imagen1.png images/imagen2.png NETWORK: comm.cgi CACHE: style/default.css

En cualquier caso, si lo que queremos es simplemente que se muestre una página de aviso al pasar al modo offline, entonces podemos utilizar la sección FALLBACK de nuestro fichero de definición. Con FALLBACK, podemos definir la página a mostrar cuando se accede a un recurso concreto y estamos en modo offline:

CACHE MANIFEST FALLBACK: / /offline.html

Por último, en la siguiente página podemos encontrar un ejemplo que podemos cargar cuando estamos offline y, si desconectamos el acceso a Internet, podremos seguir viendo sin problemas gracias a la cache:

Ejemplo de aplicacion offline

NOTA: En Firefox podemos activar el modo offline accediendo al menú “Archivo -> Trabajar sin conexión”.

Detección de la activación del modo offline

Es bastante habitual que, en algunos navegadores como Firefox, el almacenamiento de páginas para su uso offline conlleve que se muestre al usuario una alerta especial:

Aviso página con contenido marcado como offline Firefox

De igual forma, es necesario en muchos casos saber si el navegador está en modo online a la hora de lanzar o no una operación de sincronización. Aunque podemos conseguir esto de forma directa intentando abrir una conexión y comprobando si ha sido posible establecerla o no, el navegador nos proporciona una forma bastante más elegante de hacerlo.

El método definido en la especificación a tal efecto consiste en la incorporación del atributo onLine, el cual se define a nivel del objeto JavaScript Navigator:

<!DOCTYPE html> <html> <head> <title>Estado online/offline</title> <script> function updateIndicator() { var indicator = document.getElementById('indicator'); indicator.textContent = navigator.onLine ? 'online' : 'offline'; } </script> </head> <body onload="updateIndicator()"> <p>La red está <span id="indicator">(estado)</span> </body> </html>

Adicionalmente, si queremos detectar cuando el navegador pasa a modo online u offline, existen dos eventos a tal efecto a nivel del objeto Window:

<!DOCTYPE html> <html> <head> <script> document.addEventListener('offline', function(e) { alert('Offline'); }); document.addEventListener('online', function(e) { alert('Online') }); </script> </head> <body> </body> </html>
<!DOCTYPE html> <html> <body ononline="alert('Online');" onoffline="alert('Offline');"> </body> </html>

Para finalizar esta entrega, a continuación podemos ver un ejemplo de cómo Firefox detecta el cambio de estado en la conexión:

Ejemplo de evento para modo offline en Firefox



Demo online | Uso cache API
Demo online | Eventos cambio de estado
En Genbeta Dev | Introducción al almacenamiento de variables en el cliente con HTML5



Comentaris

Entrades populars d'aquest blog

Learn Composition from the Photography of Henri Cartier-Bresson

“Do you see it?” This question is a photographic mantra. Myron Barnstone , my mentor, repeats this question every day with the hopes that we do “see it.” This obvious question reminds me that even though I have seen Cartier-Bresson’s prints and read his books, there are major parts of his work which remain hidden from public view. Beneath the surface of perfectly timed snap shots is a design sensibility that is rarely challenged by contemporary photographers. Henri Cartier-Bresson. © Martine Franck Words To Know 1:1.5 Ratio: The 35mm negative measures 36mm x 24mm. Mathematically it can be reduced to a 3:2 ratio. Reduced even further it will be referred to as the 1:1.5 Ratio or the 1.5 Rectangle. Eyes: The frame of an image is created by two vertical lines and two horizontal lines. The intersection of these lines is called an eye. The four corners of a negative can be called the “eyes.” This is extremely important because the diagonals connecting these lines will form the breakdown ...

El meu editor de codi preferit el 2024, que això ja se sap que va canviant 😄

Visual Code Visual Code és un editor de codi font lleuger, però potent que s’executa al teu escriptori i està disponible per a Windows, macOS i Linux. Compta amb suport integrat per a JavaScript, TypeScript i Node.js i té un ric ecosistema d’extensions per a altres llenguatges i entorns d’execució (com C++, C#, Java, Python, PHP, Go, .NET).  És una eina ideal per a desenvolupar i depurar aplicacions web i en el núvol. Per què Visual Code? Visual Code té molts avantatges com a editor de codi font, com per exemple: És gratuït, ràpid i fàcil d’instal·lar i actualitzar. Té un ampli ecosistema d’extensions que et permeten afegir funcionalitats i personalitzar la teva experiència de desenvolupament. Té un suport integrat per a molts llenguatges i entorns d’execució, i et permet depurar i executar el teu codi des del mateix editor. Té una interfície senzilla i elegant, amb diferents temes i modes de visualització. Té un sistema de sincronització de configuracions que et permet guardar les...

Las Mejores Aplicaciones Gratis para iPad de 2012

Las Mejores Aplicaciones Gratis para iPad de 2012 : ¿No tienes ni un duro? No te preocupes, pues hoy os traemos una extensa selección de las mejores apps gratuitas que puedes conseguir en la App Store para que llenes tu iPad de calidad, sin gastar nada de nada.   ¿Estás buscando juegos o apps gratis para tu iPad? En la App Store hay más de 500,000 apps y juegos, y una gran cantidad de ellos está disponible de forma totalmente gratuita. Aquí vamos con la selección de las mejores Apps gratis para iPad (todos los modelos), organizada por categoría. ¿Estás preparado? Las Mejores Apps Gratis de Redes Sociales para iPad Nombre Facebook Gratis Categoría Redes sociales Facebook es la red social más famosa del mundo , con casi mil millones de usuarios. Su app para iPad ha tardado, pero aquí está. Nombre Twitter Gratis Categoría Redes sociales Twitter es la red de microblogging por excelencia. La forma más rápida y directa de informar y mantenerse informado de las cosa...