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