webView 拦截js alert转换为原生dialog的方法

webView 重写onJsAlert方法只弹出一次的解决方案:
做项目的时候发现,在js中,alert了好几处地方,但是,通过webview的onJsAlert的方法,只弹出了一次.
@Override
public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {


final NoticeDialog dialog= new NoticeDialog(EnjoyWingActivity.this,"",message,"确认");
dialog.show();
dialog.setNoticeListener(new NoticeDialog.NoticeListener() {
@Override
public void doConfirm() {
dialog.dismiss();

}


@Override
public void doCancel() {
dialog.dismiss();
}
});


return true;
}

通过网上查找资料,只需要添加一句话就能解决.添加result.cancel()或result.comfirm()方法.

@Override
public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {


final NoticeDialog dialog= new NoticeDialog(EnjoyWingActivity.this,"",message,"确认");
dialog.show();
dialog.setNoticeListener(new NoticeDialog.NoticeListener() {
@Override
public void doConfirm() {
dialog.dismiss();
/**解决alert只弹出一次的问题*/
result.cancel();
}


@Override
public void doCancel() {
dialog.dismiss();
}
});


return true;
}

根据需求,选择添加的位置,因为我的是一个dialog,点击后消失,这个时候,才会触发result.cancel(),弹出下一个alert.

另外两个的onJsPrompt()和onJsConfirm() 的使用方法类似.

如上就完美的解决了拦截js的原生alert,转化为和app本身风格相一致的弹窗.

    推荐阅读