前几天,在项目中遇到一个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()事件了。