当未连接到服务器时,在Android webview中从应用缓存加载
Loading from app cache in Android webview when not connected to server
我有一个使用webview的Android应用程序。有一个java后端服务器提供所有前端文件,并在apache tomcat上构建缓存清单。
我的问题是,我不确定如何从应用程序缓存加载时,服务器没有连接,但设备连接到互联网。
如果我进入应用程序代码,我可以强制它使用
缓存webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
所以我知道我的文件被适当地缓存。我还尝试了其他堆栈溢出问题的解决方案,这些问题让我检查网络状态并根据网络状态设置缓存模式,如下所示:
cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
if(cm.getActiveNetworkInfo().isConnected()) ....
但是,在设备在线但服务器关闭的情况下,这不起作用。在这种情况下,它仍然表示网络正常,并且不会从缓存加载。
理想的解决方案是,当前端webview试图通过网络访问资源时,它是不可用的,它只是从缓存加载,这正是它在正常浏览器中的工作方式。但是我可以接受变通办法,比如让应用程序检测到我特定服务器的网络连接,并相应地改变缓存模式。
谁知道解决这个问题的最佳方法?谢谢。所以问题似乎是android根本不使用HTML5应用程序缓存,除非你告诉它,这只是真的把我的想法。我用下面的代码解决了这个问题:
final WebSettings webviewSettings = webView.getSettings();
final String appCachePath = this.getCacheDir().getAbsolutePath();
webviewSettings.setDomStorageEnabled(true);
webviewSettings.setAppCachePath(appCachePath);
webviewSettings.setAllowFileAccess(true);
webviewSettings.setAppCacheEnabled(true);
webviewSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
然后它表现出我期望应用程序缓存的行为。也就是说,如果资源不能通过网络加载,它会从缓存中加载,正如缓存清单中的cache部分所指定的那样。
相关文章:
- C# WebView 不理解 JavaScript 调用 alert()(Windows 8 XAML 应用程序)
- 示例 WebView 应用程序源代码 Android
- Ionic应用程序的Webview
- 如何将javascript应用于我的webView's的html内容
- 如何使用cocoonjs-webview+构建ionic应用程序
- Chrome应用程序在Webview中的按钮/输入上添加点击事件
- 使用 WebView.loadUrl 执行 javascript 在第一次运行应用程序时不起作用
- 离子应用程序 - 无法获取要在 WebView 中打开的链接
- WebView.InvokeScriptAsync 在通用应用程序中不起作用
- 为什么我的Mac应用程序中的WebView html拒绝加载JQuery或任何外部脚本
- 基于Webview的Android浏览器应用程序中的哪些错误
- 在webview商店应用程序中调用Javascript
- WebView:在外部浏览器中打开,而不是在应用程序中打开
- Android Webview中OpenFileChooser的结果导致应用程序不响应
- 检测和更改Chrome应用程序Webview中src的URL
- 有可能用我的新上下文而不是原始的应用程序上下文来伪造WebView的构造函数吗
- 安卓谷歌地图应用程序vs使用安卓WebView查看网页中嵌入的谷歌地图
- 从webview启动应用程序,如果未安装,则重定向到播放商店
- Chrome应用程序API中webview标记的分区属性是什么
- 无法在Android Tv webview应用程序(HTML+Javascript)上捕获密钥