本篇文章同大家分享下WebView使用的过程中经常出现的一些问题及解决方法
1、H5页面没法弹出对话框:
经常会碰到Js中Alert的对话框没法弹出,只需要添加以下几行代码就可以轻松解决
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
mWebView.setWebChromeClient(new WebChromeClient());
2、本地拦截H5的对话框,并获取弹出框的内容
webView.setWebChromeClient(new ToastWebChromeClient());
final class ToastWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) { //传进来的message参数即是弹窗狂显示的内容
result.confirm();
Toast.makeText(mContext, message, 0).show();
return true;
}
}
3、将H5的对话框转化成原生的对话框
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder b2 = new AlertDialog.Builder(mContext)
.setTitle("提示").setMessage(message)
.setPositiveButton("ok",
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
result.confirm();
// MyWebView.this.finish();
}
});
b2.setCancelable(false);
b2.create();
b2.show();
return true;
}
});
4、获取H5页面title标签之间的值
在开发过程中有时候需要获取H5页面title的值作为标题,获取方法如下:
//绑定Js对象
mWebView.addJavascriptInterface(new JavaScriptInterface(), "androidInterface");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:window.androidInterface.setTitle(document.getElementsByTagName('title')[0].innerHTML);"); //调用Js方法获取标题的内容
}
});
//设置标题
public class JavaScriptInterface {
@JavascriptInterface
public void setTitle(final String title) {
mWebView.post(new Runnable() {
@Override
public void run() {
titleTv.setText(title);
}
});
}
}
5、监听加载的页面是否出现异常(例如404页面)
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
UIHelper.ToastMessage(mContext, "出错了"+description);
//用javascript隐藏系统定义的404页面信息
String data = "Page NO FOUND!";
view.loadUrl("javascript:document.body.innerHTML=\"" + data + "\"");
}
});