WebView中捕获JavaScript事件

我们在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. }
  9. }

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

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

首先,设置webView属性:

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

其次,设置WebChromeClient:

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

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

posted @ 2014-12-21 22:04  net5x  阅读(2734)  评论(0编辑  收藏  举报