Подтвердить что ты не робот

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

UPDATE:

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

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

Мой файл выглядит следующим образом:

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

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

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

теперь, как вы можете видеть в последней строке, он добавляет index.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

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

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

4b9b3361

Ответ 1

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

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

<html manifest="manifest.appcache"> 

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

Adding master entry to Application Cache with manifest 

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

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

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

Ответ 2

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

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

Ответ 3

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

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