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);
}
WebView中踩的坑_第1张图片
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 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);
}

你可能感兴趣的