我正在构建一个由菜单和 web 视图组成的应用程序。当用户选择菜单项时,webview 应该加载相应的 html 文件。到目前为止,一切都很好。
现在我正在经历,每次我按下菜单项时,webview 都会请求 html。我只想在会话中加载一次 html,因为 html 文件在一天内不会更改。所以我做的第一件事就是在服务器端正确设置过期标头。你可以在这里查看:
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(使用代理检查)-> 这很奇怪。只要它没有过期,它就应该显示缓存的版本。有什么问题?
第二个版本从不请求新的 html 文件(没关系,因为它应该那样)
任何人都知道为什么 expires 标头在这里不能正常工作?
整个代码:
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"));