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);
}
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);
}