TL; DR: Ce que je suis en train de comprendre comment configurer mon AppCache manifeste afin que seulement stocke l'URL racine, plus tout explicitement mentionné les fichiers statiques, et utilise ce site web comme une solution de repli pour toute autre URL, afin que je puisse le faire fonctionner avec ma méthode de routage basée sur SPA JS.Rendre le travail browserHistory de réagir-routeur avec AppCache sans enregistrer tous les chemins séparément
J'ai un SPA qui utilise react-router
and browserHistory pour créer des URL propres comme s'il s'agissait de sites Web distincts. La capture pour faire ce travail est que lorsque nous touchons rafraîchir, le serveur web doit servir le même site Web (et ensuite utiliser JavaScript pour lire l'url et faire des choses). Ok, c'est assez facile.
Maintenant j'essaye de faire fonctionner le SPA hors ligne avec AppCache (parce que je dois supporter Safari). L'application fonctionne un peu comme Google Maps vous permet de partager des lieux avec l'URL: elle permet aux utilisateurs de partager des vues dans des ensembles de données avec des paramètres d'affichage spécifiques via un simple lien: /dataset/<dataset name>/<parameters>
. Donc, je veux essentiellement qu'il fonctionne hors ligne à partir de l'URL principale, mais aussi de tout chemin possible comme celui-ci.
Après beaucoup d'essais et d'erreurs (et Firefox's tools to debug the manifest) je me suis ceci:
CACHE MANIFEST
# dfb55f7a1c2f0ab09a93
/static/js/bundle.dfb55f7a1c2f0ab09a93.js
CACHE:
/
static/css/bundle.min.css
NETWORK:
*
FALLBACK:
/dataset/ /index.html
Cela me permet de rafraîchir et URL de l'ensemble de données de vue lorsque hors line¹ comme vous le souhaitez! Mais maintenant, les navigateurs ne font pas que mettre en cache la racine /
, mais aussi /dataset/<foo>/<bar>
. Et si mes utilisateurs commencent à passer des URL, ils vont commencer à mettre en cache chacun d'eux. Ce n'est pas ce que je veux non plus, parce que c'est un gaspillage de ressources, et crée plus de complications lors de la mise à jour de l'application.
Alors, où je suis coincé comment configurer mon AppCache manifeste afin que seulement stocke l'URL racine, ainsi que toute mention explicite des fichiers statiques, tout en me permettant d'utiliser ledit site racine en tant que solution de repli pour toute autre URL afin que je peux frapper rafraîchir hors ligne.
¹ Eh bien, en supposant que l'ensemble de données a été visité en cache auparavant; pour cela, nous utilisons la bibliothèque localForage. Tout cela fonctionne bien ne chevauche pas avec AppCache autant que je peux voir.