本篇文章同你们分享下WebView使用的过程当中常常出现的一些问题及解决方法 javascript
常常会碰到Js中Alert的对话框无法弹出,只须要添加如下几行代码就能够轻松解决java
mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); mWebView.setWebChromeClient(new WebChromeClient());
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; } }
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; } });
在开发过程当中有时候须要获取H5页面title的值做为标题,获取方法以下:android
//绑定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); } }); } }
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 + "\""); } });