本篇文章同你們分享下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 + "\""); } });