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本身风格相一致的弹窗.
推荐阅读
- OC:|OC: WKWebView详解
- WKWebview|WKWebview js 调用oc 和oc调用js
- 整理大部分Eslint规则
- 分享几个前端面试题目
- iOS10|iOS10 WKWebView里的视频播放转屏适配
- WKWebView的位置问题
- 微信域名防封|微信域名防封 微信域名拦截检测技术
- WebView详解
- iOS开发|iOS开发 检测项目中是否包含UIWebView
- iOS|iOS 写一个弹框基类 (baseAlert)