9

メニューとウェブビューで構成されるアプリを構築しています。ユーザーがメニュー項目を選択すると、webview は関連する html ファイルをロードする必要があります。ここまでは順調ですね。

メニュー項目を押すたびに、webview が html を要求していることを経験しています。セッションで 1 回だけ html をロードしたいので、html ファイルは 1 日の間に変更されません。だから私が最初にしたことは、サーバー側で有効期限ヘッダーを正しく設定することです。ここで確認できます:

http://redbot.org/?uri=http%3A%2F%2Fcutoutcam.com%2Ftest1.php

それから私は試しました

mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);

結果:

最初のバージョンは毎回htmlを要求します(プロキシでチェック)->それは奇妙です。有効期限が切れていない限り、キャッシュされたバージョンが表示されます。どうしたの?

2 番目のバージョンは、新しい html ファイルを要求することはありません (それは問題ありません。そうすることが想定されているからです)。

ここで失効ヘッダーが正しく機能しない理由を知っている人はいますか?

コード全体:

mWebView = (WebView) getView().findViewById(R.id.fragment_web_view_wv);
mWebView.setWebViewClient(new WebViewClient(this));
mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);



mWebView.setWebChromeClient(new WebChromeClient() {
      @Override
      public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,
              android.webkit.WebStorage.QuotaUpdater quotaUpdater)
      {
            quotaUpdater.updateQuota(spaceNeeded * 2);
      }
});

mWebView.getSettings().setDomStorageEnabled(true);


mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);


String appCachePath = getActivity().getApplicationContext().getCacheDir().getAbsolutePath();
mWebView.getSettings().setAppCachePath(appCachePath);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
mWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
mWebView.loadUrl(args.getString("url"));
4

2 に答える 2

2

最新のブラウザのほとんどは、キャッシュされたコンテンツであっても、サーバーが更新されたコンテンツを利用できるかどうかを確認するためだけに、常にサーバーにリクエストを送信します。このような場合、ブラウザはリクエストに「If-Modified-Since」ヘッダーを含めて、何も変更されていない場合にサーバーが空の HTTP 304 レスポンスをすばやく返すことができるようにします。

オプションは次のいずれかです。1) Last-Modified-Since を評価し、必要に応じて 304 を返すようにサーバーを構成します。これにより、ブラウザはキャッシュされたコンテンツを使用するように指示されます。2) JavaScript を使用してページの読み込みを実装し、ブラウザー ベンダーの気まぐれの影響を受けない localstorage を使用してカスタム キャッシュ メカニズムを作成します。これはちょっとした作業ですが、私はいくつかのパフォーマンス重視のプロジェクトで成功を収めてきました。

于 2013-04-28T03:09:08.553 に答える