2012-02-15 14 views
22

UPDATE:mio HTML5 Application Cache manifesto è caching tutto

** ho postato questa domanda quando questa funzione è stato veramente nuovo, ora mi rendo conto che questa caratteristica non dovrebbe essere utilizzato in questo modo a meno che non viene utilizzato tramite JavaScript . ma sembra che questo hack sia un'ottima soluzione per la maggior parte dei principianti che fanno lo stesso errore e cattivo uso di questa funzione. Se vuoi memorizzare tutto tranne il tuo HTML, devi farlo con JS oppure puoi usare la soluzione qui sotto **

Immagino che la mia domanda si riferisca a questo: Se il file fa riferimento al manifest usando l'attributo manifest del Il tag HTML rientra nelle MASTER CACHE ENTRIES come potresti avere una pagina dinamica usando il manifest.

Il mio file si presenta così:

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: 
* 

Ora il problema è ancora una volta un passo in rassegna pagina non nel manifesto, i miei attuali file php dinamico come index.php, quando ho lì vedo la pagina e in nessuna cache cromo va:

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 

Fin qui tutto bene fino a quando ho effettivamente caricare una pagina, e cromo va:

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

ora come si può vedere nell'ultima riga si aggiunge index.php alla mia cache dell'applicazione e ho verificato questo andando a url: chrome://appcache-internals/

Si dice:

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 

dove le cose come index.php e home.php non dovrebbe essere memorizzato nella cache. Vorrei dirgli di non memorizzare nella cache eventuali estensioni HTML se possibile. Ma ecco quello che ho imparato da varie RFC credo: Un flag jolly whitelist online, che è aperto o bloccante.

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. 

ben vorrei utilizzare uno di questi white-list bandiere jolly on-line e impostarlo a bloccare, ma non riesco a trovare ulteriori ulteriori spiegazioni o esempi. Ho letto anche:

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). 

Vorrei anche usare qualche modello come questo, ma poi di nuovo io riesco a trovare alcuna documentazione. Perché non c'è traccia della documentazione manifest di appcache e nessun altro sito web che ho visitato lo sta utilizzando, dal momento che la mia directory chrome appcache non ne mostra nessuno!?!?

Grazie per il vostro tempo!

risposta

26

Ecco un hack ho scoperto giocando intorno:

Non ho trovato la risposta definitiva, ma da quello che ho imparato sembra che il manifesto non è destinata ad essere impostato in ogni pagina. Ancora una volta non sono sicuro, ma questo è un trucco che ho trovato. Ho una pagina, come manifest.html che ha il

<html manifest="manifest.appcache"> 

ho imparato che le pagine che non hanno questa non verranno aggiunti alla cache tuttavia saranno ancora continuare a utilizzare la cache dell'applicazione se sullo stesso dominio. Quindi se includi manifest.html di una pagina html pianura che ha questo in un iframe sul everypage non sarà in cache la pagina come Chrome di uscita non è più:

Adding master entry to Application Cache with manifest 

ma se si va alla scheda di rete si vedrà che si sta usando la cache

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

contenuto di 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> 
+0

Questo ha funzionato bene per me. Grazie per la pubblicazione. –

+1

Capisco che, il mio punto fosse: come si usa e si introduce la cache dell'applicazione nel browser senza includere la pagina html principale ... se questo ha senso. – Neo

+1

@Neo potresti servire la pagina principale, che non vuoi memorizzare nella cache, con la direttiva cache "no-store". – oberhamsi

10

L'AppCache contiene sempre la pagina che contiene l'attributo manifesta nel tag html.

Se si desidera che la pagina stessa sia dinamica, è necessario caricarne il contenuto con una chiamata ajax a un servizio presente nella sezione RETE.

+1

+1 questo è un metodo migliore. Quando ho scritto questa domanda, la cache dell'app era nuova e molte persone, incluso me stesso, l'ho usata per una soluzione cache veloce senza dover gestire le intestazioni HTTP, penso ancora che potrebbe essere utilizzata in questo modo come un hack se pienamente compresa, cosa stai suggerendo è il modo giusto per usare questa tecnologia, la mia risposta è come usarlo come un hack per il caching di contenuti statici, su una pagina dinamica che è completamente aizzata. – Neo

+0

@Joeri salverebbe comunque quella pagina in appcache, quindi non funziona se hai molti percorsi (ad esempio domain.com/userId). – themihai

3

Immagino che la soluzione Iframe non funzioni. Se pensi che i file siano sfusi da appcache: no. provengono dalla cache del browser.

disabilitare browsercache in devtools-settings e guardare "network". puoi vedere che tutti gli elementi verranno caricati tramite la rete e non provengono da una cache (app).

+0

Quindi non è necessario specificare i file nel manifest di appcache. Vedi il registro di init? – Neo

+0

Sì. Ho impostato 'no-cache' su js e css, e poi ho scoperto che tutti sono' 200' dal server, ** NOT ** dalla cache !! – Turtle

+0

@Neo Li faccio nel manifest, ma non serve. – Turtle