4

私はオフライン モードで小さなモバイル WebApp に取り組んでいます。マニフェスト ファイルが変更された場合に自動更新を防ぐ方法はありますか? ユーザーのインターネット接続が悪い場合、すべてのファイルを強制的にダウンロードする必要はありませんが、後でファイルを更新できるように、小さなメッセージが表示されます。

私は試した

window.addEventListener('load', function(e) {    
  window.applicationCache.addEventListener('ondownloading', function(e) {
      window.applicationCache.abort();
  }, false);
}, false);

しかし、うまくいきません。Safari 6.0.2 でも Chrome Canary でもありません。

ユーザーが次のコードを使用して手動で「更新」ボタンをクリックした場合にのみ、アプリはファイルを更新する必要があります。

var appCache = window.applicationCache;
appCache.update();

if (appCache.status == window.applicationCache.UPDATEREADY) {
  appCache.swapCache();  // The fetch was successful, swap in the new cache.
}
4

2 に答える 2

1

downloading addEventListener呼び出しをwindow loadイベントでラップする必要はありませんapplicationCache。オブジェクトは最初からそこにあります。

イベントをリッスンしていますがondownloading、その名前のイベントはありませんon。.

checkingただし、イベントを介して、更新プロセスをもう少し早くキャッ​​チすることをお勧めします。イベントはキャンセル可能abortであるため、どちらも呼び出す必要はありません。checking

var blockUpdates = true;

window.applicationCache.addEventListener('updating', function(event) {
    if (blockUpdates) {
        event.preventDefault();
    }
}, false);

function updateButtonPressed() {
    blockUpdates = false;
    window.applicationCache.update();
}

window.applicationCache.addEventListener('updateready', function() {
    // but what do we do here?
}, false);

しかし、アップデートがあった場合はどうすればよいでしょうか? swapCache更新されたキャッシュを使用しますが、新しいリクエストに対してのみ、ページに古いファイルが既にある可能性があります。古いアセットを新しいものに置き換える最も簡単な方法は、ページをリロードすることです。これを自動的に行うこともできますが、ユーザーにとって混乱を招く可能性があるため、更新の準備ができていることをユーザーに伝え、ページをリロードするボタンを提供することをお勧めします。

于 2012-12-13T14:13:07.210 に答える