android - 在android中显示缓存版本的webview

标签 android html webview offline-caching offline-mode

我正在尝试让网站的 HTML5 离线缓存版本在 WebView 内部出现故障时显示。

我已经覆盖了onReceivedError好的,当网络中断时调用此方法。 问题是它显示通用的“网页不可用”消息。

如何让它显示页面的 HTML5 缓存版本? Web 应用程序的离线存储肯定可以正常工作,因为它在 Firefox 和 Chrome 的桌面版本中运行良好。

我知道我可以打电话 loadDataonReceivedError 中手动进入 View ,但我不确定从哪里可以获取 HTML5 缓存值。

注意:如果我在 loadData 中设置一些虚拟数据例如view.loadData(Uri.encode("<html><div>Page load failed</div></html>"), "text/html", "UTF-8");然后单击返回(通过检测返回事件并调用 webview.goBack(); 然后页面的缓存版本显示正常。

这里是我添加的一些代码行来设置 webview:

webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webview.getSettings().setAppCacheMaxSize(1024*1024*8);                         
webview.getSettings().setAppCachePath("/data/data/com.stuff.android/cache");
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setAppCacheEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);

最佳答案

尝试使用以下方式找出网络状态

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

( Detect whether there is an Internet connection available on Android )

这也需要

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在你的 AndroidManifest.xml 中

现在您可以将缓存行为设置为 LOAD_CACHE_ONLY 或 LOAD_NO_CACHE,具体取决于网络连接是否可用,

webview.getSettings().setCacheMode(...)

关于android - 在android中显示缓存版本的webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467998/

相关文章:

java - 将 Android 应用程序中的数据插入到 mySql 数据库中

android - 即时应用程序包名称

objective-c - Cocoa Webkit - 禁用文本选择,但允许文本字段选择

javascript - 拒绝显示框架,因为它在 android webview 中将 X-Frame-Options 设置为 'DENY

java - 如何从数据库获取图像并设置数据的位置?

java - 为什么我的 android 应用程序在调用 Thread.sleep 时跳帧?

html - 在 jquery 移动页脚中将元素对齐到中心

javascript - 页面上弹出链接?

html - 如何使用 google doc iframe 禁用 pdf 查看器中的弹出选项?

android - 网站未出现在 WebView 中