android webview 加载重定向页面时点击无法回退,导致重复加载当前页面问题的解决方案

项目中需要用webView加载第三方的web页面,其中有个页面有重定向到另外一个页面,造成了页面无法后退,后退到上个页面,又重定向到之前界面,重定向源页面也被加入到浏览记录中,刚开始想查找api中找个编辑历史记录的方法,把找重定向源页面从历史记录中删除,半天找不到,只有clearHistory方法。

后用浏览器访问该网站,则后退正常,会退到重定向页面。用微信内置WebView ,QQ内置WebView打开该页面后退也正常,发现重定向源页面也被加入到浏览记录中。


在使用WebView的时候,我们一般都会设置WebViewClient ,重写shouldOverrideUrlLoading方法,让webView加载点击url,并return true。因为不这样设置,点击页面上的链接弹出浏览器

  1. webView.setWebViewClient(new WebViewClient() {  
  2.   
  3.     @Override  
  4.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  5.          view.loadUrl(url);  
  6.         return true;  
  7.     }  
  8.   
  9. }); 

而造成重定向源页面被加入历史记录貌似恰恰是这个设置。而让人想不到的解决方案竟是下面这段代码

  1. webView.setWebViewClient(new WebViewClient() {  
  2.   
  3.         @Override  
  4.         public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  5.                
  6.             return false;  
  7.         }  
  8.   
  9.     });  

之前我以为这样设置跟没设置WebViewClient效果一样,也会点连接弹浏览器。没想到竟是完全不一样的,这样设置点连接会在当前webView打开,而且重定向页面后退也没问题



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android WebView 实现离线加载原来的缓存页面,你可以使用以下步骤: 1. 设置 WebView 的缓存模式为 `LOAD_CACHE_ELSE_NETWORK`,这样 WebView 优先加载缓存,如果缓存不存在才从网络加载数据。可以使用 `setCacheMode` 方法设置缓存模式: ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ``` 2. 确保 WebView 启用了 DOM 存储和数据库存储功能,这样可以在离线仍然能够使用相关的本地存储数据。可以使用以下方法启用这些功能: ```java webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setDatabaseEnabled(true); ``` 3. 在加载 WebView网页之前,检查设备的网络连接状态。如果设备处于离线状态,你可以手动加载缓存的页面,否则 WebView 将按照缓存模式加载页面。示例代码如下: ```java ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo == null || !networkInfo.isConnected()) { // 设备离线状态 webView.loadUrl("file:///android_asset/offline.html"); // 加载离线页面 } else { // 设备在线状态,WebView 根据缓存模式加载网页 webView.loadUrl("https://example.com"); // 加载网页 } ``` 在上述代码中,如果设备处于离线状态,则加载位于 assets 目录下的 offline.html 页面,你可以根据需要替换为你自己的离线页面路径。 通过以上步骤,当设备处于离线状态WebView加载之前缓存的页面,而不是尝试从网络加载新的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值