Android WebView常见问题总结

本篇文章同你们分享下WebView使用的过程当中常常出现的一些问题及解决方法 javascript

一、H5页面无法弹出对话框: 

常常会碰到Js中Alert的对话框无法弹出,只须要添加如下几行代码就能够轻松解决java

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
mWebView.setWebChromeClient(new WebChromeClient());

二、本地拦截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;
        }
}

三、将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;
            }
        });

四、获取H5页面title标签之间的值 

在开发过程当中有时候须要获取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);                     
                }
            });
        }
   }

五、监听加载的页面是否出现异常(例如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 + "\"");
            }                                   
        });
相关文章
相关标签/搜索