您的位置:首页 > 移动开发

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

2016-10-12 21:40 1066 查看
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本身风格相一致的弹窗.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: