Мой Манифест Кэша Приложения HTML5 кэширует все - PullRequest
23 голосов
/ 15 февраля 2012

ОБНОВЛЕНИЕ:

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

Я думаю, мой вопрос сводится к следующему: если файл, ссылающийся на манифест, использует атрибут manifestHTML-тег попадает под 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 в кэш моего приложения, и я подтвердил это, перейдя по URL: chrome://appcache-internals/

Itговорит:

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, и никакой другой веб-сайт, на котором я был, не использует его, так как в моем каталоге chc appcache нет ни одного!?!?

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

Ответы [ 3 ]

26 голосов
/ 15 февраля 2012

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

Я не нашел окончательного ответа, но из того, что я узнал, кажется, что манифест предназначен не для каждой страницы. Опять же я не уверен, но это хак, с которым я столкнулся. У меня есть страница, такая как 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>
10 голосов
/ 09 мая 2012

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

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

3 голосов
/ 16 августа 2013

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

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

...