Мой Манифест Кэша Приложения HTML5 кэширует все

ОБНОВИТЬ:

** Я опубликовал этот вопрос, когда эта функция была действительно новой, теперь я понимаю, что эту функцию нельзя использовать таким образом, если она не используется в JavaScript. но похоже, что этот хак является отличным решением для большинства новичков, которые делают ту же ошибку и злоупотребляют этой функцией. Если вы хотите кэшировать все, кроме вашего HTML, это должно быть сделано с помощью JS, или вы можете использовать решение ниже **

Я предполагаю, что мой вопрос сводится к следующему: если файл, ссылающийся на манифест с использованием атрибута manifest тега HTML, попадает под MASTER CACHE ENTRIES, как вы могли бы иметь динамическую страницу, использующую манифест.

Мой файл выглядит так:

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

Теперь проблема заключается в том, что, когда я просматриваю страницу, не входящую в манифест, мои настоящие динамические php-файлы, такие как index.php, когда я впервые вижу страницу и там в кеше отсутствует хром:

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

Пока все хорошо, пока я на самом деле не загружаю страницу, и chrome выходит:

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

теперь, как вы можете видеть в последней строке, он добавляет index.php в кеш моего приложения, и я проверил это, перейдя по ссылке: chrome://appcache-internals/

Это говорит:

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

где такие вещи, как index.php и home.php не должны кэшироваться. Я хотел бы сказать, чтобы не кэшировать какие-либо расширения HTML, если это возможно. Но вот то, чему я научился из различных RFC, я считаю: он-лайн флаг подстановочного знака белого списка, который либо открыт, либо блокирован.

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.

ну, я хотел бы использовать один из этих сетевых подстановочных знаков белого списка и установить его на блокировку, но я не могу найти больше объяснений или примеров. Я также читаю:

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

Я также хотел бы использовать такой шаблон, но, опять же, я не могу найти документацию. Почему нет никаких признаков документации манифеста appcache и никакой другой веб-сайт, на котором я был, не использует его, так как в моем каталоге chrome appcache нет ни одного!?!?

Спасибо за ваше время!

3 ответа

Решение

Вот хак, который я узнал, играя вокруг:

Я не нашел окончательного ответа, но из того, что я узнал, кажется, что манифест не предназначен для установки на каждой странице. Опять я не уверен, но это хак, с которым я столкнулся. У меня есть страница, такая как manifest.html, которая имеет

<html manifest="manifest.appcache"> 

Я узнал, что страницы, не имеющие этого, не будут добавлены в кэш, однако они все равно будут продолжать использовать кэш приложения, если он находится в том же домене. Поэтому, если вы включите manifest.html в простую HTML-страницу, которая содержит это в iframe на каждой странице, она не будет кэшировать ту страницу, как chrome, больше не будет выводить:

Adding master entry to Application Cache with manifest 

но если вы перейдете на вкладку сети, вы увидите, что он использует кэш

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

содержимое файла timer_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>

Appcache всегда содержит страницу, которая содержит атрибут manifest в теге html.

Если вы хотите, чтобы сама страница была динамичной, вы должны загрузить в нее контент с помощью ajax-вызова службы, находящейся в разделе NETWORK.

Я думаю, что обходной путь Iframe не работает. Если вы думаете, что файлы загружены из appcache: нет. они приходят из кеша браузера.

отключите кеш браузера в devtools-settings и посмотрите "сеть". Вы можете видеть, что все элементы будут загружены через сеть и не будут получены из кэша приложения.

Другие вопросы по тегам