3

マニフェストのステータスをチェックする on page oad イベントがあり、変更がある場合はユーザーに再読み込みを求めます。<button>ただし、にステータスがあるかどうかを手動で確認するためにバインドしようとしていますnoupdate。これを機能させることができないようです。これが私のコードです:

window.addEventListener('load', function(e) {
  if (window.applicationCache) {
    window.applicationCache.addEventListener('updateready', function(e) {
      if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
          // Browser downloaded a new app cache.
          // Swap it in and reload the page to get the new hotness.
          window.applicationCache.swapCache();
          if (confirm('A new version of this App is available. Load it now?')) {
                window.location.reload();
          }
        } else {
          // no manifest change..
        }
    }, false);

    // if there is no update, display a message
    window.applicationCache.addEventListener('noupdate', function(e) {

      alert('App is up to date. ');

    }, false);

  }
}, false);

// check for a update each hour
setInterval(function () { window.applicationCache.update(); }, 3600000);

私の機能検出noupdateは、本質的に問題なくページの読み込み時にアラートを発生させますが、ボタンに関連付けられた機能でそれを使用すると..

<a href="javascript:refresh();" data-theme="a" data-role="button" 
data-icon="arrow-r" data-inline="true">Refresh</a>

<script>
    function refresh() {
        if (window.applicationCache) {
            window.applicationCache.addEventListener('updateready', function(e) {
              if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
                  // Browser downloaded a new app cache.
                  // Swap it in and reload the page to get the new hotness.
                  window.applicationCache.swapCache();
                  if (confirm('A new version of this App is available. Load it now?')) {
                        window.location.reload();
                  }
                } else {
                  // no manifest change..
                }
            }, false);

            // if there is no update, display a message
            window.applicationCache.addEventListener('noupdate', function(e) {

              alert('App is up to date. ');

            }, false);

          }
    }
</script>

noupdateステータスを取得しません...

4

2 に答える 2

2

最初のコード ブロックで例示したように、ウィンドウの読み込み時にイベント リスナーをバインドする場合、refresh 関数で行う必要があるのは次のとおりです。

<script>
    function refresh() {
      applicationCache.update()
    }
</script>

applicationCache.update を呼び出した後、「updateready」、「noupdate」、または「error」イベントが発生します。通常、エラー イベントは、サーバーに到達できないため、appcache マニフェストをダウンロードできなかったことを意味します。リスナーをこのイベントにバインドすることもできます。

余談window.applicationCache.swapCache()ですが、現在 appcache を使用している場合、呼び出しは必要ありません。swapCache は、ページ自体をリロードせずにリソース (ページに表示される画像など) を更新する場合にのみ必要です。window.location.reload()すべてのリソースを完全にリロードするには十分であり、すべての JavaScript が再評価されるなどの利点があります。本当の再起動。

于 2013-03-23T22:07:57.120 に答える
0

これは、noupdateイベントがページのloadイベントでのみ発生するためです。ページをロードすると、ブラウザーはアプリケーション キャッシュをチェックし、更新が必要かどうかを判断してから、イベントを発生させます。ボタンをクリックすると、イベントはすでに発生しているため、キャッチできません。

代わりに、ページの読み込みにイベントを実際に添付する必要がありますが、代わりにupdatereadynoupdateイベントで変数を更新する必要がありますisUpToDate。次に、ボタンのクリック ハンドラーがisUpToDate変数をチェックし、それに応じて更新するかどうかを決定する必要があります。

于 2013-02-07T07:59:39.000 に答える