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 + "\"");
            }                                   
        });
相關文章
相關標籤/搜索