IPadのホーム画面(iOS 5.0.1 iPad 2)にWebアプリを追加する問題に遭遇しました。それを開くと、Safariとは関係なく、背後で何かをキャッシュしているように見えます。
設定(履歴のクリアとCookieとデータのクリア)で利用できるSafariからすべてをクリアしました。SafariでWebアプリに移動すると、アプリが現在の状態で表示されます。ただし、ホーム画面のブックマークを開くと、アプリは変更前の状態になります。
Cache.manifestを使用してオフラインで使用するためにリソースをキャッシュすることに関する多くの情報を見てきましたが、これとは正反対のことをしたいので、何もキャッシュしないので、これが関連しているかどうかはわかりません。
私は、外部リソースのテストすらしないレベルに達しています。 index.htmlのbody要素で任意のテスト文字列を変更すると、ホーム画面のブックマークに更新されたテキストが表示されません。
私は回避策を見つけたと思います:
サイトの新しいバージョンは、index.htmlファイルが変更されたときにのみ表示されます。
(最初にロードされるファイル)
Index.htmlを残し、他のファイルの一部のjsのみを変更すると、サイトは新しいバージョンをロードしません。
別の回避策は、JavascriptおよびCSSリンクに?v = 1を追加することです。例えば:
<link rel="stylesheet" type="text/css" media="all" href="./css/ipad.css?v=1">
<script src="./js/ipad.js?v=1"></script>
私の知る限り、ファイルが変更されても番号を更新する必要はないようです。どうやら、最新のソフトウェアアップデートがインストールされたiPad 2では、何か動的なことを示唆するだけで十分です。
メインHTMLページによって参照されるリソースをキャッシュしないように指示するcache.manifest
を作成します。
CACHE MANIFEST
# Version 1.0000
NETWORK:
*
index.html
で使用:
<!DOCTYPE html>
<html manifest="cache.manifest">
これで、たとえばそのコメントのバージョン番号を増やすなどして、そのマニフェストファイルを変更するたびに、ブラウザーはindex.html
も再ダウンロードします。
キャッシュが更新されたときにページがリロードされることを確認します。
<script>
function updateSite(event) {
window.location.reload();
}
window.applicationCache.addEventListener('updateready', updateSite, false);
</script>
私たちのiOSウェブクリップアプリでは、以下を使用しています。これまでのところ、キャッシュの問題はありません:
1-「manifest.appcache.php」と呼ばれる1つのキャッシュマニフェストファイルがあります
<?php
header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
header('Content-type: text/cache-manifest');
?>
CACHE MANIFEST
CACHE:
# Don't cache anything
FALLBACK:
# Nothing
NETWORK:
# Request everything from server
*
2-HTMLファイルには次のものがあります。
<!DOCTYPE html>
<html lang="en" manifest="manifest.appcache.php">
<head>
...
Safari Web Inspectorを開いて開いているWebアプリをポイントしている場合は、キャッシュを使用せずに開いているWebアプリを強制的に再読み込みできます。 Webインスペクタがアクティブな状態で、SHIFT + COMMAND + R
を押します(Macの場合)。更新されたアセットをトリガーするには、もう一度更新する必要がある場合があります。
私はangularアプリを開発しています。iPadでテストしようとしたときにこの問題に遭遇しました。URLの末尾に意味のないクエリを追加することで、最新のすべてのアセットのバージョン。
www.somesite.com?meaninglessquery
私はデバイスの電源を切ることができました。アプリマニフェストを変更しました。しかし、おそらく、ブラウザがそれを探すようにするには、リフレッシュなどが必要です。ブラウザのクロムを削除したので、リセットボタンはありません。アプリを「閉じて」(笑)、アプリをスワイプしてみました。とにかく、iOSはとにかく実行を続ける傾向があると思います。シャットダウンすることで、それをリフレッシュさせることができました。
たぶん、わからないリフレッシュのためのジェスチャーがあるかもしれません。おそらく、キャッシュされたWebアプリに小さな「更新の確認」更新ボタンを組み込む必要があります。
最新のSafari(v12.0.1)開発ツールには、[ネットワーク]タブの右上に[リソースキャッシュを無視]ボタンがあります。それを確認してリロードしてください。