samedi 28 septembre 2013

Réparer le Local Storage d’Android

Le Local Storage… Tous les développeurs web connaissent sûrement ce petit stockage web, de type clé/valeur, permettant de garder en mémoire des informations de manière permanente.

html5-local-storage

Nous avons voulu utiliser cet espace de stockage web dans les développements de nos applications hybrides. Malheureusement, son implémentation n’est pas complète dans les Webviews Android.

Voici comment y remédier :

Sur iOS, aucun problème. Le Local Storage est commun à toutes les UIWebviews que l’on instancie. C’est conforme à nos attentes et à l’utilisation dans un navigateur web classique.

Le véritable problème est venu sur Android. Le Local Storage existe bien sur cette plate-forme comme en témoigne la documentation. En revanche, il n’est pas commun à toutes les webviews. C’est-à-dire que si l’on enregistre une valeur pour une clé donnée dans une première webview, on ne peut pas la récupérer dans une deuxième webview.

Dans notre cas, notre application gérant plusieurs webviews, c’était problématique.

Pour résoudre ce problème, nous avons créé notre propre Local Storage côté Android, une simple base de données locale, ainsi qu’une JavaScriptInterface implémentant les méthodes « getItem », « setItem », « removeItem » et « clear » du localStorage habituel et permettant au JavaScript exécuté dans la Webview d’avoir accès à cette base de données.

Grâce a quelques lignes JavaScript nous avons ensuite remplacé le localStorage JavaScript par le nôtre, permettant ainsi à toutes nos Webviews d’utiliser les même données.

Un sample de code et un petit tuto sont disponibles sur GitHub pour ceux qui auraient passé quelques nuits blanches à chercher une solution sans la trouver !

Aucun commentaire:

Enregistrer un commentaire