Question Mon manifeste de cache d'application HTML5 cache tout


METTRE À JOUR:

** J'ai posté cette question lorsque cette fonctionnalité était vraiment nouvelle, je me rends compte maintenant que cette fonctionnalité ne doit pas être utilisée de cette manière à moins qu’elle ne soit utilisée via JavaScript. mais ce hack semble être une excellente solution pour la plupart des débutants qui font la même erreur et font un mauvais usage de cette fonctionnalité. Si vous voulez tout mettre en cache sauf votre HTML, cela doit être fait avec JS ou vous pouvez utiliser la solution ci-dessous **

Je suppose que ma question se résume à ceci: Si le fichier faisant référence au manifeste à l'aide de l'attribut manifest de la balise HTML relève de la commande MASTER CACHE ENTRIES, comment une page dynamique peut-elle utiliser le manifeste?

Mon fichier ressemble à ceci:

CACHE MANIFEST

CACHE:
# IMAGES:
/stylesheets/bg.jpg
/stylesheets/cont_bg.png
#and so forth.. 

#EXTERNAL
http://chat.mydomain.com/themes/images/panel_bg.png
http://chat.mydomain.com/themes/images/images_core.png

####################################
#STYLE SHEETS:
/stylesheets/min.css
/stylesheets/css_night.aspx

#####################################
#JAVASCRIPT:
/JAVASCRIPT/header_javascript.js

#EXTERNAL:
http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js
http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js

FALLBACK:
/ /offline.php

NETWORK:
*

Maintenant, le problème est une fois que je navigue sur une page qui ne figure pas dans le manifeste, mes fichiers PHP dynamiques comme index.php, quand je vois la page pour la première fois et qu’il n’ya plus de chrome dans le cache:

Adding master entry to Application Cache with manifest http://208.109.248.197/manifest.appcache

Application Cache Downloading event
Application Cache Progress event (0 of 28) 
...
Application Cache Progress event (28 of 28) 
Application Cache NoUpdate event

Jusqu'ici tout va bien jusqu'à ce que je charge une page, et le chrome va:

Application Cache UpdateReady event
Adding master entry to Application Cache with manifest http://mydomain.com/manifest.appcache

maintenant, comme vous pouvez le voir dans la dernière ligne, il ajoute index.php dans le cache de mon application et je l'ai vérifié en allant sur l'url: chrome://appcache-internals/

Ça dit:

Flags   URL Size (headers and data)
Explicit,   http://mydomain/JAVASCRIPT/header_javascript.js 57.5 kB
Master, http://mydomain/home.php 51.2 kB
Master, http://mydomain/index.php   53.5 kB
Master, Fallback,   http://mydomain/offline.php 49.4 kB

où les choses comme index.php et home.php ne sont pas censées être mises en cache. Je voudrais lui dire de ne pas mettre en cache les extensions HTML si possible. Mais voici ce que j'ai appris de différentes RFC je crois: Un indicateur générique de liste blanche en ligne, ouvert ou bloquant.

The open state indicates that any URL not listed as cached is to be implicitly treated as being in the online whitelist namespaces; the blocking state indicates that URLs not listed explicitly in the manifest are to be treated as unavailable.

Eh bien, je voudrais utiliser l'un de ces indicateurs de caractères génériques en ligne et le configurer pour le bloquer, mais je ne trouve aucune autre explication ou exemple. Je lis aussi:

zero or more URLs that form the online whitelist namespaces.

These are used as prefix match patterns, and declare URLs for which the user agent will ignore the application cache, instead fetching them normally (i.e. from the network or locale HTTP cache as appropriate).

J'aimerais aussi utiliser un motif comme celui-ci, mais je ne trouve aucune documentation. Pourquoi n'y a-t-il aucun signe de documentation manifeste d'appcache et aucun autre site Web sur lequel je suis allé l'utilise, étant donné que mon répertoire d'appcache de chrome n'en contient aucun!?!

Merci pour votre temps!


22
2018-02-15 02:17


origine


Réponses:


Voici un hack que j'ai découvert en jouant:

Je n'ai pas trouvé la réponse ultime mais d'après ce que j'ai appris, il semble que le manifeste ne soit pas destiné à être placé sur chaque page. Encore une fois je ne suis pas sûr mais c'est un hack que j'ai rencontré. J'ai une page telle que manifest.html qui a le

<html manifest="manifest.appcache"> 

J'ai appris que les pages qui ne l'ont pas ne seront pas ajoutées au cache, cependant elles continueront à utiliser le cache de l'application si elles se trouvent sur le même domaine. Par conséquent, si vous incluez manifest.html une page HTML simple qui a ceci dans une iframe sur everypage, elle ne mettra pas en cache cette page comme le chrome ne sera plus généré:

Adding master entry to Application Cache with manifest 

mais si vous allez sur l'onglet réseau, vous verrez qu'il utilise le cache

<iframe id='manifest_iframe_hack' 
  style='display: none;' 
  src='temporary_manifest_hack.html'>
</iframe> 

contenu de temporary_manifest_hack.html:

<!DOCTYPE HTML>
<html lang="en" class="no-js" manifest="manifest.appcache">
    <head>
        <meta charset="utf-8">
        <title>Hack 4 Manifest</title>
    </head>
    <body></body>
</html>

26
2018-02-15 03:48



L'appcache contient toujours la page qui contient l'attribut manifeste dans la balise html.

Si vous voulez que cette page soit dynamique, vous devez y charger le contenu avec un appel ajax à un service qui se trouve dans la section NETWORK.


10
2018-05-08 21:34



Je suppose que la solution de rechange Iframe ne fonctionne pas. Si vous pensez que les fichiers sont lancés depuis appcache: non. ils proviennent du cache du navigateur.

désactiver le navigateur sous devtools-settings et regarder "network". vous pouvez voir que tous les éléments seront chargés via le réseau et ne proviendront pas du cache (app).


3
2017-08-16 12:52