web-dev-qa-db-ja.com

iPadのホーム画面でブックマークしたWebアプリを強制的に更新するにはどうすればよいですか?

IPadのホーム画面(iOS 5.0.1 iPad 2)にWebアプリを追加する問題に遭遇しました。それを開くと、Safariとは関係なく、背後で何かをキャッシュしているように見えます。

設定(履歴のクリアとCookieとデータのクリア)で利用できるSafariからすべてをクリアしました。SafariでWebアプリに移動すると、アプリが現在の状態で表示されます。ただし、ホーム画面のブックマークを開くと、アプリは変更前の状態になります。

Cache.manifestを使用してオフラインで使用するためにリソースをキャッシュすることに関する多くの情報を見てきましたが、これとは正反対のことをしたいので、何もキャッシュしないので、これが関連しているかどうかはわかりません。

私は、外部リソースのテストすらしないレベルに達しています。 index.htmlのbody要素で任意のテスト文字列を変更すると、ホーム画面のブックマークに更新されたテキストが表示されません。

29
M Marsh

私は回避策を見つけたと思います:

サイトの新しいバージョンは、index.htmlファイルが変更されたときにのみ表示されます。
(最初にロードされるファイル)

Index.htmlを残し、他のファイルの一部のjsのみを変更すると、サイトは新しいバージョンをロードしません。

5
christophe

別の回避策は、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では、何か動的なことを示唆するだけで十分です。

24
Hendrik

メイン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>

Safari開発者ライブラリには優れたドキュメントがあります

11
thombles

私たちの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>
...
5
Rabi

Safari Web Inspectorを開いて開いているWebアプリをポイントしている場合は、キャッシュを使用せずに開いているWebアプリを強制的に再読み込みできます。 Webインスペクタがアクティブな状態で、SHIFT + COMMAND + Rを押します(Macの場合)。更新されたアセットをトリガーするには、もう一度更新する必要がある場合があります。

2
Sarah

私はangularアプリを開発しています。iPadでテストしようとしたときにこの問題に遭遇しました。URLの末尾に意味のないクエリを追加することで、最新のすべてのアセットのバージョン。

www.somesite.com?meaninglessquery

2

私はデバイスの電源を切ることができました。アプリマニフェストを変更しました。しかし、おそらく、ブラウザがそれを探すようにするには、リフレッシュなどが必要です。ブラウザのクロムを削除したので、リセットボタンはありません。アプリを「閉じて」(笑)、アプリをスワイプしてみました。とにかく、iOSはとにかく実行を続ける傾向があると思います。シャットダウンすることで、それをリフレッシュさせることができました。

たぶん、わからないリフレッシュのためのジェスチャーがあるかもしれません。おそらく、キャッシュされたWebアプリに小さな「更新の確認」更新ボタンを組み込む必要があります。

1
NathanSmutz

最新のSafari(v12.0.1)開発ツールには、[ネットワーク]タブの右上に[リソースキャッシュを無視]ボタンがあります。それを確認してリロードしてください。

0
Chen Lim