android WebView踩坑总结
一、 自己写了WebView
,loadUrl却跳转到系统浏览器, 设置 WebViewClient
即可解决
mWebView.setWebViewClient(new WebViewClient());
二、shouldOverrideUrlLoading
拦截重定向的方法不执行,原因有可能是前端跳转采用的不是链接,可能是脚手架里面的路由导致,所以我们要拦截需要去WebChromeClient
的 onProgressChanged
方法中做处理
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
String originalUrl = view.getOriginalUrl();
if (originalUrl != null && originalUrl.contains("login?redirect")) {
}
mProgressBar.setVisibility(View.GONE);
} else {
mProgressBar.setProgress(newProgress);
}
}
});
三、Android WebView回调H5方法的通用简单写法
protected final static String ON_NATIVE_COMPLETE = "javascript:%s('%s')";
protected void onNativeSuccess(String method, final String data) {
method = method == null ? "success" : method;
onNative(method, data);
}
protected void onNativeError(String method, final String msg) {
method = method == null ? "error" : method;
onNative(method, msg);
}
private void onNative(final String method, final String params) {
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl(String.format(ON_NATIVE_COMPLETE, method, params));
}
});
}