23

アップデート:

**この機能が本当に新しいときにこの質問を投稿しましたが、JavaScriptを介して使用しない限り、この機能をこのように使用するべきではないことに気付きました。しかし、このハックは、同じ間違いを犯してこの機能を誤用するほとんどの初心者にとって素晴らしい解決策のようです。HTML以外のすべてをキャッシュしたい場合は、JSで行うか、以下のソリューションを使用できます**

私の質問はこれに要約されると思います。HTMLタグのマニフェスト属性を使用してマニフェストを参照するファイルがMASTERCACHEENTRIESに該当する場合、動的ページでマニフェストを使用するにはどうすればよいでしょうか。

私のファイルは次のようになります。

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

ここで問題となるのは、マニフェストにないページ、index.phpなどの実際の動的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/

それは言う:

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.

これらのオンラインホワイトリストワイルドカードフラグの1つを使用して、ブロックに設定したいのですが、これ以上の説明や例は見つかりません。私も読んだ:

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

このようなパターンも使用したいのですが、ドキュメントが見つかりません。私のchromeappcacheディレクトリに何も表示されないのに、appcacheマニフェストのドキュメントの兆候がなく、私が行ったことのある他のWebサイトがそれを使用していないのはなぜですか!?!?

お時間をいただきありがとうございます!

4

3 に答える 3

26

これが私が遊んで見つけたハックです:

究極の答えは見つかりませんでしたが、私が学んだことから、マニフェストはすべてのページに設定することを意図していないようです。繰り返しますが、これは私が遭遇したハックです。私はmanifest.htmlのようなページを持っています

<html manifest="manifest.appcache"> 

これを持たないページはキャッシュに追加されませんが、同じドメインにある場合は引き続きアプリケーション キャッシュを使用することがわかりました。したがって、すべてのページの iframe にこれを含むプレーンな html ページを manifest.html に含めると、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>
于 2012-02-15T03:48:16.310 に答える
10

appcache には、html タグに manifest 属性を含むページが常に含まれます。

そのページ自体を動的にしたい場合は、NETWORK セクションにあるサービスへの ajax 呼び出しを使用してコンテンツをページにロードする必要があります。

于 2012-05-08T21:34:50.847 に答える
3

Iframe-workaround は機能しないと思います。ファイルが appcache から読み込まれたと思われる場合: いいえ。それらはブラウザのキャッシュから来ています。

devtools-settings で browsercache を無効にし、「ネットワーク」を確認します。すべての要素がネットワーク経由で読み込まれ、(アプリ) キャッシュから取得されないことがわかります。

于 2013-08-16T12:52:54.420 に答える