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/

相关文章:

android - 由于 'X-Frame-Options' 设置为 'SAMEORIGIN',因此链接在 WebView 中不起作用

android - 为什么 Instances 表的行 ID (_id) 会更改?

javascript - 全部居中并根据数据长度调整excel列

android - 如何让应用自动扫描?

asp.net - 带有数据列表的 Chrome 中的样式问题

php - Prestashop:显示产品的所有属性引用

android - 如何使用 HitTestResult 在 Android WebView 中使用 Longclick 获取链接图像(而不是图像 URL)的链接 URL

javascript - OS X WebKit WebView 不显示 JS 弹出窗口

java - Handler、Runnable 和 Threads 之间有什么区别?

java - 如何在没有 Gradle 的情况下构建 Android 应用程序