WebView中踩的坑

1. Android WebView 使用HTTPS时有的图片不能加载

Solution: 从Lollipop(5.0)开始 WebView 默认不允许混合模式,https当中不能加载http资源,需要设置开启。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
image.png

2.WebView 中页面回退(goBack())

例: 重定向问题。初次加载 页面A,点击链接(http://xxxxx.com)跳转到页面B,B中重定向到了C页面(http://xxxx.com/index.html)。这时在 C页面回退(goBack),就回到B页面,B页面又重定向到了C页面。最后,就无法回到A页面,也无法退出整个页面。
Solution: 一种方法自己管理WebView的加载栈。

private Stack<String> mUrlStack = new Stack<>(); //定义一个栈,管理加载的链接
//初始加载链接添加
mUrlStack.push(aUrl);

//在WebView监听回调中,监听跳转链接
public boolean shouldOverrideUrlLoading(WebView view,String url){  
          mUrlStack.push(aUrl);
          return true;            
 }  

//回退监听 
@Override  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
     //判断是否可以返回操作  
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {  
        if(!mUrlStack.isEmpty()){
            //移除最后的链接
            String lastUrl = mUrlStack.pop();
            if(!mUrlStack.isEmpty()){
                if(lastUrl.contains("index.html")){
                    //是重定向链接,则再次pop出来上一个链接
                    mUrlStack.pop();
                }
                if(!mUrlStack.isEmpty()){
                    //执行回退
                    webView.loadUrl(mUrlStack.peek());
                    return true;
                }
            }
        }
    }          
    return super.onKeyDown(keyCode, event);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,660评论 25 709
  • 在Android开发过程中,使用过WebView的童鞋可能难免会遇到URL重定向问题。 简单叙述下这种问题的情况,...
    SupLuo阅读 138,410评论 2 52
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,694评论 2 45
  • 大学毕业的时候,我妈说给我买一个苹果手机,原因是工作的人都在用,怕我在这种环境下心里会有小落差,这个提议被我拒绝,...
    你是什么小可爱阅读 3,349评论 0 1
  • 很长时间以来,不知为何,都没有看电影的心情,看电影绝对是需要心情的,要能闭上嘴巴,才能安静的进入到电影的悲欢离合...
    悠悠6547阅读 3,157评论 1 2