Android WebView中捕获JavaScript事件

jopen 11年前

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

function testConfirm() {       if(confirm("pay or not?")) {         alert("yes! i do");       }       else      {         alert("no!!!");       }   }

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

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

首先,设置webView属性:

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

其次,设置WebChromeClient:

  mWebView.setWebChromeClient(new WebChromeClient() {       @Override     public boolean onJsAlert(WebView view, String url, String message,       final JsResult result) {      AlertDialog.Builder builder = new AlertDialog.Builder(mContext);      builder.setMessage(message)        .setNeutralButton("确定", new OnClickListener() {         @Override         public void onClick(DialogInterface arg0, int arg1) {          arg0.dismiss();         }        }).show();      result.cancel();      return true;     }       @Override     public boolean onJsConfirm(WebView view, String url,       String message, final JsResult result) {      // TODO Auto-generated method stub      Log.i(TAG, "onJsConfirm" + "," + "url: " + url);        DialogUtils.dialogBuilder(mContext, "温馨提示", message,        new DialogCallBack() {           @Override         public void onCompate() {          Log.i(TAG, "onJsConfirm,onCompate");          result.confirm();         }           @Override         public void onCancel() {          Log.i(TAG, "onJsConfirm,onCancel");          result.cancel();         }        });      return true;     }    });

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

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

来自:http://my.oschina.net/liucundong/blog/161110