2012-02-15 18 views
22

UPDATE:Moje HTML5 Application Cache Oczywisty jest buforowanie wszystko

** Zamieściłem to pytanie, gdy funkcja ta była naprawdę nowy, teraz zdaję sobie sprawę, że ta funkcja nie powinny być używane w ten sposób, chyba że jest on używany przez JavaScript . ale wydaje się, że ten hack jest doskonałym rozwiązaniem dla większości początkujących, którzy popełniają ten sam błąd i niewłaściwe użycie tej funkcji. Jeśli chcesz cache'ować wszystko z wyjątkiem twojego HTML to powinno to być zrobione z JS lub możesz użyć rozwiązania poniżej **

Domyślam się, że moje pytanie sprowadza się do tego: Jeśli plik odwołujący się do manifestu za pomocą atrybutu manifestu Znacznik HTML należy do MASTER CACHE ENTRIES w jaki sposób strona dynamiczna może korzystać z manifestu.

Mój plik wygląda tak:

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

Teraz problem jest raz przeglądać strony nie w manifeście, moje rzeczywiste pliki dynamiczny php jak index.php, kiedy po raz pierwszy zobaczyć stronę i tam no cache chrom idzie:

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 

tej pory tak dobrze dopóki ja faktycznie załadować stronę i chrom idzie:

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

teraz jak widać w ostatnim wierszu dodaje go do mojego index.php pamięci podręcznej aplikacji i sprawdzeniu tego, przechodząc do adresu URL: chrome://appcache-internals/

Mówi:

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 

gdzie takie rzeczy jak index.php i home.php nie powinny być buforowane. Chciałbym powiedzieć, aby nie buforować żadnych rozszerzeń html, jeśli to możliwe. Ale oto, co dowiedziałem się z różnych RFC, jak sądzę: Flaga wieloznacznika online białej listy, która jest otwarta lub blokująca.

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. 

dobrze Chciałbym użyć jednego z tych internetowych biało-lista flag wieloznacznych i ustawić ją na blokowanie, ale nie mogę znaleźć żadnych wyjaśnień lub przykłady jeszcze bardziej. Czytam też:

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

Chciałbym również, aby korzystać z niektórych wzór takiego, ale potem znowu mogę znaleźć żadnej dokumentacji. Dlaczego nie ma śladu manifestu aplikacji appcache i żadna inna strona, na której byłem, nie używa go, ponieważ mój katalog appcache w chrome pokazuje brak!?!?

Dziękuję za poświęcony czas!

Odpowiedz

26

Oto hack I okazało się, grając około:

nie znalazłem ostatecznej odpowiedzi, ale z tego co nauczyłem się wydaje, że manifest nie jest przeznaczona do ustawienia na każdej stronie. Znowu nie jestem pewien, ale to jest hack, który spotkałem. Mam stronę, takie jak manifest.html który ma

<html manifest="manifest.appcache"> 

dowiedziałem się, że strony, które nie mają tego nie będą dodawane do pamięci podręcznej jednak będą one nadal przy użyciu pamięci podręcznej aplikacji, jeśli w tej samej domenie. Dlatego jeśli dołączasz manifest.html zwykły strony HTML, która ma to w iframe na everypage nie będzie buforować tej strony, takie jak Chrome nie będzie już wyjścia:

Adding master entry to Application Cache with manifest 

ale jeśli pójdziesz do zakładki Network widać, że jest go za pomocą pamięci podręcznej

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

treść 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

To zadziałało dobrze dla mnie. Dziękuję za publikację. –

+1

Rozumiem, że moim celem było: w jaki sposób używasz i wprowadzasz pamięć podręczną aplikacji do przeglądarki bez włączania głównej strony html ... jeśli to ma jakiś sens. – Neo

+1

@Neo możesz obsługiwać stronę główną, której nie chcesz buforować, z dyrektywą dotyczącą pamięci podręcznej "brak sklepu". – oberhamsi

10

pamięć podręczną aplikacji zawsze zawiera stronę, która zawiera oczywisty atrybut w tagu html.

Jeśli chcesz, aby sama strona była dynamiczna, musisz załadować do niej zawartość za pomocą wywołania ajax do usługi znajdującej się w sekcji SIEĆ.

+1

+1 To jest lepsza metoda. Kiedy napisałem to pytanie, pamięć podręczna aplikacji była nowa i wiele osób, w tym ja, użyło jej do szybkiego rozwiązania w pamięci podręcznej, nie mając do czynienia z nagłówkami HTTP, nadal uważam, że może być używane w ten sposób jako haker, jeśli jest w pełni zrozumiałe, co sugerujesz to jest właściwa droga do korzystania z tej technologii, moją odpowiedzią jest to, jak używać jej jako hackowania do buforowania statycznych treści, na dynamicznej stronie, która jest w pełni w pełni zhomologowana. – Neo

+0

@Joeri nadal będzie zapisywać tę stronę w appcache, więc nie będzie działać, jeśli masz wiele tras (np. Domain.com/userId). – themihai

3

Domyślam się, że sposób obejścia Iframe nie działa. Jeśli sądzisz, że pliki znajdują się w folderze appcache: nie. pochodzą z pamięci podręcznej przeglądarki.

wyłącza pamięć podręczną w ustawieniach devtools i spójrz na "sieć". widać, że wszystkie elementy będą ładowane przez sieć i nie pochodzą z pamięci podręcznej (app).

+0

Następnie nie musisz określać plików w swoim manifeście appcache. Czy widzisz dziennik init? – Neo

+0

Tak. Ustawiam 'no-cache' na js i css, a następnie znajduję, że wszystkie one są' 200' z serwera, ** NOT ** from cache !! – Turtle

+0

@Neo Robię je w manifeście, ale bezużyteczne. – Turtle

Powiązane problemy