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

     

  • 相关阅读:
    MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
    MyBatis学习总结(五)——实现关联表查询
    MyBatis学习总结(六)——调用存储过程
    MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
    MyBatis学习总结(二)----使用MyBatis对表执行CRUD操作
    MyBatis学习总结(三)——优化MyBatis配置文件中的配置
    CORS跨域问题
    按指定后缀名删除文件的demo
    Markdown起步
    Linux和git起步
  • 原文地址:https://www.cnblogs.com/soarwell/p/3788459.html
Copyright © 2011-2022 走看看