2011-04-17 2 views
1

Salut les gars: Je me mets à créer une application web hors ligne. J'espère qu'il peut être exécuté dans UIWebView (iOS) ou WebView (Android). Je ne sais pas si ça marche. Les fichiers html et javascript fonctionnent bien maintenant, mais mes applications ont besoin de traiter certains fichiers binaires que je définis moi-même, et ces fichiers sont créés de manière dynamique afin qu'ils ne puissent pas être mis en cache hors ligne. Si les pages Web sont chargées dans le navigateur Web du serveur Web, je peux lire les fichiers binaires via XMLHttpRequest. Mais si le navigateur ouvre les pages en tant que fichiers locaux, les fichiers binaires ne peuvent pas être lus via le protocole http et ne peuvent même pas être accédés par le javascript, je suppose pour des raisons de sécurité. Je suis coincé ici, pourriez-vous me donner quelques conseils sur la façon dont javascript dans l'application web hors ligne créer/lire/écrire des fichiers locaux? J'ai essayé d'utiliser <img src="my_data_file"/>, et espère que je peux obtenir les données brutes de l'élément, mais pas moyen. Si le javascript ne peut pas le faire, existe-t-il une solution de contournement pour utiliser les balises html existantes pour lire les données brutes?l'application web hors connexion peut-elle accéder au fichier local?

+0

Je ne reçois toujours pas le flux de travail de fichiers. D'abord vous dites qu'ils sont créés dynamiquement, ensuite vous voulez les charger localement. Qu'est ce que c'est maintenant? Le chargement d'un fichier local sur votre disque dur n'est pas la même chose que l'utilisation d'un site Web en mode déconnecté btw. – DanMan

Répondre

2

Il existe un stockage local et fonctionne comme une base de données. Voici un joli tutoriel.

http://html5tutorial.net/tutorials/working-with-html5-localstorage.html

Vous devez charger les images dynamiquement en utilisant si l'objet image(). Le navigateur devrait mettre en cache les images en mode hors-ligne si ...

Cette question semble assez similaire à ce que vous cherchez:

Can you use HTML5 local storage to store a file? If not, how?

+0

Merci d'avoir répondu. Mais mes fichiers seront plus grands que 5M, et je pensais qu'ils ne peuvent pas être stockés dans le stockage local comme une valeur-clé. L'API FileSystem n'est pas prise en charge dans Safari, donc je suppose que UIWebView ne prend pas en charge l'API FileSystem. – icespace

+0

Ce sont des fichiers assez gros. Le cache ne peut pas être accédé directement, donc je pense que vous n'avez pas de chance, à moins que vous n'ayez envie d'encoder vos données dans base64 et de les réencoder quand vous les ressortiez, mais vous atteindrez toujours la limite. Il n'y a pas d'autre moyen que je connaisse pour accéder au stockage local. – tjameson

+0

@tjamson: Peut-être que vous avez raison, je cherchais depuis longtemps, rien trouvé. Je suppose que j'ai besoin de code natif pour aider l'application web hors ligne. Mais les versions iOS et Android sont nécessaires. – icespace

0

-je utiliser le Web SQL db (qui peut avoir un max stockage de 50 Mo sur iOS, taille variable sur Android) pour le stockage d'images locales. Je sérialise les images en base64 (côté serveur, mais aussi côté client) et les stocke dans le sqlite db sous forme de texte. Ce n'est pas un stockage illimité, mais il bat 5 Mo.

+0

Est-ce que la plateforme Android supporte sqlite db? Ça semble intéressant. – icespace

+0

Oui, mais la taille limite dépend de ce qui est disponible sur l'appareil. –

0

Vous voudrez peut-être jeter un oeil à ce projet http://www.phonegap.com/ comme une solution possible à long terme pour le problème d'accès aux fichiers de périphériques. Qu'est-ce que ce système est de vous fournir une API javascript pour certaines des fonctionnalités matérielles réelles des périphériques, y compris éventuellement le fichier IO vous auriez besoin de manipuler des fichiers volumineux. Il s'agit d'un projet open source qui existe depuis un certain temps, mais qui comporte des compromis, comme si vous deviez réellement déployer un binaire séparé sur chaque système d'exploitation cible. : -/

Questions connexes