1

J'essaie de trouver un moyen de générer automatiquement un fichier manifeste ApplicationCache à partir de tous les fichiers HTML, CSS, JavaScript et images utilisés par notre site Web.Trouver tous les fichiers chargés dans le site Web pour créer le manifeste ApplicationCache

Nous en avons besoin car nous devons prendre en charge l'utilisation hors ligne du site Web. Plus précisément, utilisation hors ligne d'une API Web ArcGIS pour JavaScript. Nous n'utilisons pas de personnel de service au lieu de l'application ApplicationCache, car la prise en charge d'iOS est une exigence critique et les techniciens de service ne sont pas pris en charge du tout sur iOS, sur n'importe quel navigateur.

L'idée est que je vais appeler manuellement une fonction après que le site soit complètement chargé, ce qui créera de façon dynamique le texte à utiliser pour le nouveau manifeste. Ensuite, copiez-le manuellement dans le fichier manifeste. C'est donc quelque chose que je ferais seulement quand quelque chose dans le site change et que le fichier manifeste doit être mis à jour.

Cet outil, ManifestR, est très proche: http://westciv.com/tools/manifestR/ mais a deux problèmes avec elle:

1- Il ne gère pas les URL de fichiers d'images trouvées dans les fichiers CSS correctement. Par exemple, s'il trouve url (../ images/myimage.png), il ajoutera le lien relatif ../images/myimage.png directement dans le fichier manifeste au lieu d'ajouter le lien non relatif comme www.mysite.com/ images/myimage.png.

2- Il ne répertorie aucun des scripts chargés via dojo.require (modules AMD).

Je pense utiliser un code similaire pour résoudre ces problèmes et compiler la liste des fichiers. Je vois déjà comment réparer # 1, mais ne peux pas comprendre comment réparer # 2. Donc, en utilisant JavaScript, comment puis-je trouver la liste de toutes les URL de script utilisées par le site web, pas seulement les balises auge chargées (trouvées dans l'objet window.scripts), mais aussi celles chargées en utilisant les modules AMD?

Fondamentalement, je veux compiler la même liste que Chrome me montre pour le site Web dans le volet Sources.

Ex:

enter image description here

Je pense que si ce n'est pas disponible partout, je pourrais peut-être créer une fonction proxy pour dojo.require qui maintient les pistes de tous les fichiers chargés par AMD.

Mais je voulais demander ici d'abord, peut-être que j'ai raté un outil de script qui fait déjà cela? Ou peut-être que mon plan n'est pas bon?

Merci

+0

J'ai trouvé que je peux obtenir la liste de tous les modules chargés dans require.modules – greenkarmic

+0

Encore mieux, j'ai trouvé que je peux obtenir une liste de toutes les ressources chargées via l'API Resource Timing. Définissez d'abord la taille de la mémoire tampon avec performance.setResourceTimingBufferSize (some_value); utilisez ensuite window.performance.getEntriesByType ('resource') pour obtenir la liste des fichiers. Beaucoup plus simple. – greenkarmic

Répondre

1

Je n'ai jamais utilisé applicationCache pour une API ArcGIS pour l'application JavaScript, mais je vous recommande de servir d'abord jusqu'à a custom Dojo build of your application afin de regrouper votre code dans une ou plusieurs couches à construire. Si vous configurez votre build Dojo correctement (pas un petit exploit), vous devriez connaître les scripts exacts qui seront nécessaires. En outre, je soupçonne qu'une fois que vous comprendrez comment obtenir la liste des scripts, vous pouvez avoir des considérations spéciales afin que le chargeur AMD Dojo puisse utiliser les fichiers mis en cache. Voir: dojo and the offline application cache

Bonne chance.

+1

Ouais un collègue a également suggéré la même chose, créer un ensemble personnalisé et seulement le cache dans le cache de l'application, au lieu de toute la liste des modules et de leurs dépendances. J'y pense pour plus tard, mais pour l'instant ce n'est pas nécessaire car cela fonctionne avec la liste complète des fichiers que j'ai obtenus de l'API Resource Timing. Cela fonctionne et j'ai d'autres problèmes hors ligne à traiter (comme la simulation de certaines réponses aux requêtes du serveur et la mise en cache des tuiles de la carte). En ce qui concerne le chargement des modules à partir d'ApplicationCache, je n'ai rien fait, le navigateur sait déjà les récupérer du cache si je suis hors ligne. Merci! – greenkarmic