Android开发之WebView中捕获JavaScript事件

前几天,在项目中遇到一个BUG:

目前创新互联建站已为近千家的企业提供了网站建设、域名、网络空间、网站托管维护、企业网站设计、仓山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

我们在Android工程中使用了WebView,打开一个网银支付url,点击支付的时候,他们会在网页中使用js弹出一个询问框,js代码如下:

 
 
 
  1. function testConfirm() {  
  2.     if(confirm("pay or not?")) {  
  3.       alert("yes! i do");  
  4.     }  
  5.     else 
  6.     {  
  7.       alert("no!!!");  
  8.     }  

我在webView没有对js这个事件进行处理,就导致流程不能正确执行下去了。

查了一下api,最后是这样解决了:

首先,设置webView属性:

 
 
 
  1. mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 

其次,设置WebChromeClient:

 
 
 
  1. mWebView.setWebChromeClient(new WebChromeClient() { 
  2.  
  3.             @Override 
  4.             public boolean onJsAlert(WebView view, String url, String message, 
  5.                     final JsResult result) { 
  6.                 AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
  7.                 builder.setMessage(message) 
  8.                         .setNeutralButton("确定", new OnClickListener() { 
  9.                             @Override 
  10.                             public void onClick(DialogInterface arg0, int arg1) { 
  11.                                 arg0.dismiss(); 
  12.                             } 
  13.                         }).show(); 
  14.                 result.cancel(); 
  15.                 return true; 
  16.             } 
  17.  
  18.             @Override 
  19.             public boolean onJsConfirm(WebView view, String url, 
  20.                     String message, final JsResult result) { 
  21.                 // TODO Auto-generated method stub 
  22.                 Log.i(TAG, "onJsConfirm" + "," + "url: " + url); 
  23.  
  24.                 DialogUtils.dialogBuilder(mContext, "温馨提示", message, 
  25.                         new DialogCallBack() { 
  26.  
  27.                             @Override 
  28.                             public void onCompate() { 
  29.                                 Log.i(TAG, "onJsConfirm,onCompate"); 
  30.                                 result.confirm(); 
  31.                             } 
  32.  
  33.                             @Override 
  34.                             public void onCancel() { 
  35.                                 Log.i(TAG, "onJsConfirm,onCancel"); 
  36.                                 result.cancel(); 
  37.                             } 
  38.                         }); 
  39.                 return true; 
  40.             } 
  41.         }); 

如此,webView中就可以捕获javascript的alert()、confirm()事件了。

测试用的url:http://liucundong.sinaapp.com/testWebView.php

网站标题:Android开发之WebView中捕获JavaScript事件
URL标题:http://www.mswzjz.cn/qtweb/news13/243913.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能