zoukankan      html  css  js  c++  java
  • 安卓开发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上打开连接。

    使用webView. setWebChromeClient(new WebChromeClient())

             当webView. setWebChromeClient(new WebChromeClient())后,默认已实现alert和confirm方法。但是提示窗口标题有带url,而且window.open没有反应。要自定义alert和confirm窗口和实现window.open需要重载WebChromeClient。

            

    新建类MyWebChromeClient,继承WebChromeClient

    (一)重载onJsAlert方法实现js的alert

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

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

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

                       .setMessage(message)

                       .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);

     

  • 相关阅读:
    SQL语句获取数据库名、表名、储存过程以及参数列表 狼
    CKEditor3.3+CKFinder2.0附带CKF去除水印 狼
    media player 和realplayer 编程接口 狼
    教您如何去认识人!(识人术) 狼
    引用 JS判断浏览器类型方法 狼
    (转)初始化多维数组
    kmeans 聚类 (代码为: 博客数据聚类) (python )
    对博客订阅源URL中的单词进行计数 (仅限英文博客,中文订阅源不支持 )
    eclipse +python 修改 各种颜色 +字体
    常见错误收集: lucene 读取word文档问题
  • 原文地址:https://www.cnblogs.com/soarwell/p/3788459.html
Copyright © 2011-2022 走看看