安卓開發7- WebView支持open、alert、confirm等js

採用WebView實現安卓手機OA時,OA系統中有js的alert、confirm、window.open()不起做用。要點:重載WebChromeClient類;實現alert對應的onJsAlert,confirm對應的onJsConfirm,window.open對應的onCreateWindow;setSupportMultipleWindows支持彈出窗口;setWebViewClient支持在webview上打開鏈接。javascript

 

使用webView. setWebChromeClient(new WebChromeClient())java

         當webView. setWebChromeClient(new WebChromeClient())後,默認已實現alert和confirm方法。可是提示窗口標題有帶url,並且window.open沒有反應。要自定義alert和confirm窗口和實現window.open須要重載WebChromeClient。web

        

新建類MyWebChromeClient,繼承WebChromeClient瀏覽器

(一)重載onJsAlert方法實現js的alertide

         public boolean onJsAlert(WebView view, String url, String message, JsResult result) {ui

                   final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());this

 

                   builder.setTitle("OA提示信息")url

                   .setMessage(message)blog

                   .setPositiveButton("肯定", null)繼承

                   .setCancelable(false)

                   .create()

                   .show();

                   result.confirm();

                   return true;

         }

當用WebView訪問一個網頁,帶有javascript的alert提示時,出現的效果

(二) 重載onJsConfirm方法實現js的confirm

         public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {

                   final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());

                   builder.setTitle("OA確認信息")

                   .setMessage(message)

                   .setPositiveButton("肯定", new OnClickListener() {

                            public void onClick(DialogInterface dialog, int which) {

                                     result.confirm();

                            }

                   }).setNeutralButton("取消", new OnClickListener() {

                            public void onClick(DialogInterface dialog, int which) {

                                     result.cancel();

                            }

                   })

                   .create()

                   .show();

                   return true;

         }

 

(三) 重載onCreateWindow方法實現js的window.open

         public WebView newWebView = null;

        

         @Override

         public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {

                   newWebView = new WebView(view.getContext());

                   view.addView(newWebView);

             WebSettings settings = newWebView.getSettings();

             settings.setJavaScriptEnabled(true);

                   //這個setWebViewClient要加上,不然window.open彈出瀏覽器打開。

             newWebView.setWebViewClient(new WebViewClient());

             newWebView.setWebChromeClient(this);

 

             WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;

             transport.setWebView(newWebView);

             resultMsg.sendToTarget();

 

             return true;

         }       

 

(三) 重載onCloseWindow方法實現js的window.close

         public void onCloseWindow(WebView view) {

                   if (newWebView != null) {

                            newWebView.setVisibility(View.GONE);

                            view.removeView(newWebView);

                   }

         }

 

(四)修改MainActivity的onCreateView

         WebSettings setting = webView1.getSettings();

         setting.setJavaScriptEnabled(true);

        

         //沒有setSupportMultipleWindows的話window.open不會增長新窗口

         setting.setSupportMultipleWindows(true);   

         //沒有setWebViewClient的話點鏈接會採用瀏覽器打開

         webView1.setWebViewClient(new WebViewClient());

         webView1.setWebChromeClient(new MyWebChromeClient());

         webView1.loadUrl(sUrl);

 

相關文章
相關標籤/搜索