Мой манифест кэша приложений HTML5 кэширует все

обновление:

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

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

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

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, когда я впервые вижу страницу и там в кеше chrome идет:

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

Итак, как вы видите в последней строке он добавляет индекс.php для моего кэша приложений, и я проверил это, перейдя по url: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

где такие вещи, как индекс.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.

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

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"> 

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

Adding master entry to Application Cache with manifest 

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

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

содержимое 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>

appcache всегда содержит страницу, содержащую атрибут манифеста в теге html.

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


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

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