WebView中捕获JavaScript事件

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

我们在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()事件了。

测试用的HTML页面代码:

<html>
	<head>
		<title>cundong's test</title>
        <script type="text/javascript">
            function testAlert(){
            	alert("Hello! I am an alert box!");
            }
            
            function testConfirm(){
            	if(confirm("pay or not?"))
                {
                    alert("yes! i do");
                }
                else
                {
                    alert("no!!!");
                }
            }
        </script>
	</head>
	<body>
        
        <button id="testalert" onClick="testAlert();">test alert</button>
        <br/>
        <button id="testconfirm" onClick="testConfirm();">test confirm</button>
	</body>
</html>

转载于:https://my.oschina.net/liucundong/blog/161110

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值