Android加载webView--setWebChromeClient默认不会显示弹窗

2023-11-19

1 设置自定义浏览器客户端

webView.setWebChromeClient(new MyWebChromeClient());

2  onJsAlert就是弹窗-只会有一个

    /**
     * 自定义弹出框
     */
    class MyWebChromeClient extends WebChromeClient {
        public boolean onJsAlert(WebView view, String url, String message,
                                 JsResult result) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
            builder.setTitle("消息提示")
                    .setMessage(message)
                    .setPositiveButton("确定", null);

            // 不需要绑定按键事件
            // 屏蔽keycode等于84之类的按键
            builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                    return true;
                }
            });
            // 禁止响应按back键的事件
            builder.setCancelable(false);
            AlertDialog dialog = builder.create();
            dialog.show();
            result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
            return true;
        }

        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            currentProgress = mProgressBar.getProgress();
            if (newProgress >= 100 && !isAnimStart) {
                // 防止调用多次动画
                isAnimStart = true;
                mProgressBar.setProgress(newProgress);
                // 开启属性动画让进度条平滑消失
                startDismissAnimation(mProgressBar.getProgress());
            } else {
                // 开启属性动画让进度条平滑递增
                startProgressAnimation(newProgress);
            }
        }

        public boolean onJsConfirm(WebView view, String url, String message,
                                   final JsResult result) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
            builder.setTitle("消息提示")
                    .setMessage(message)
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    })
                    .setNeutralButton("取消", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            result.cancel();
                        }
                    });
            builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {
                    result.cancel();
                }
            });

            // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
            builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                    return true;
                }
            });
            // 禁止响应按back键的事件
            // builder.setCancelable(false);
            AlertDialog dialog = builder.create();
            dialog.show();
            return true;
            // return super.onJsConfirm(view, url, message, result);
        }

        public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
            return super.onJsBeforeUnload(view, url, message, result);
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android加载webView--setWebChromeClient默认不会显示弹窗 的相关文章

  • MAC下如何删除idea

    MAC下如何删除idea 进入访达 点击应用程序列表 找到idea 右键或者拖动到废纸篓 打开终端 进入自己用户名下的Library目录 一般刚打开就在自己用户名下 cd Users 你的用户名 Library 使用cd命令分别进入Logs
  • BUUCTF-EasySQL

    这是一道蛮基础的sql注入的题 打开题目 一个具有黑客色彩的登陆页面 emm 没有注册窗口 在用户名或密码处加个单引号发现报错 判断是字符型注入 通过万能密码登陆注入进去 username admin or 1 1 password 拿到f
  • 出现org.apache.http.NoHttpResponseException

    摘要 spring resttemplate使用httpclient4 4 连接池 出现org apache http NoHttpResponseException 10 0 0 25 8080 failed to respond异常的解
  • YOLOV5加速之TensorRT篇

    之前写过一篇Android版本yolov5s的博客 最近工作搞了下TensorRT 也遇到几个坑不过最终还是实现了 做一下小小的分享 这里直接上github上大牛的连接 我的代码是在他的基础上改的 里面有很多模型的加速直接看里面的yolov
  • 如何利用JS生成二维码

    问题来源 最近在做一个项目 有这么个需求 通过生成二维码来实现网页的分享 问题分析 脑海的第一反应 当然是用js来实现 自己手写 当然不是 解决方案 使用 QRCode js QRCode js 是一个用于生成二维码的 JavaScript
  • Unity 游戏背景音乐突然消失,AudioSource却还在游戏场景中(更新中)

    查看AudioSource isVirtual 是否为True 如果是则音效被系统剔除 音效被系统剔除原因 1 音效某一时刻播放的次数太多
  • BrokenPipeError: [Errno 32] Broken pipe

    BrokenPipeError Errno 32 Broken pipe 前言 今天在训练yolov5 6 1版本 突然出现BrokenPipeError Errno 32 Broken pipe错误 一 运行命令python train
  • Qt5.9.1安装包下载

    一 下载地址 附上百度网盘下载链接链接 https pan baidu com s 1wwvHe5kHwSg68hy1YM6Lhg 提取码 a999 二 安装步骤 选中qt opensource windows x86 5 9 1 exe右
  • xss-工具-Beef-Xss安装以及使用

    Beef Xss工具的简介 KaliLinux官网对这工具的介绍地址 https www kali org tools beef xss GitHub地址 https github com beefproject beef Beef Xss
  • 如何解决stata数据管理器中变量变红的问题

    目标 解决open变量变红的问题 网上说可以通过以下代码解决 实际上是缘木求鱼 encode encode 红色数字的变量名 gen 新产生的变量名 自己尝试用这个代码之后 发现对应变量不是红色了 但变成了蓝色 我开始以为问题已经解决了 但
  • Spring Security,没有看起来那么复杂(附源码)

    权限管理是每个项目必备的功能 只是各自要求的复杂程度不同 简单的项目可能一个 Filter 或 Interceptor 就解决了 复杂一点的就可能会引入安全框架 如 Shiro Spring Security 等 其中 Spring Sec
  • margin:0 auto是什么意思

    margin是外边距的意 当一个元素样式属性里有dumargin 0 auto时 并且父元素的宽度是确定的 意思是这个元素处于其父元素的居中位置 并且这个元素的上下外边距为0 即 上下外边距为0 左右自动 实际效果为左右居中 补充 marg
  • 缺少msvcp120.dll、msvcr120.dll解决办法

    缺少msvcp120 dll msvcr120 dll解决办法 丢失或缺少msvcp120 dll msvcr120 dll等这些报错是因为我们没有安装vc 运行库 看一下报错对应的数字对应的版本 msvcp msvcr60 71和80 d
  • Python--内建函数大全

    Python 解释器内置了许多函数和类型 列表如下 按字母排序 省略了几个我没用过或者不常用的 内建函数表 abs delattr hash memoryview set
  • 结构体排序------蓝桥杯

    题目 给出 nn 个人的语文 数学 英语的成绩 你需要把他们的成绩降序输出 排序的规则 先按总分排序 如果总分相等 就按语文成绩降序排序 如果语文成绩还相等 就按数学成绩降序排序 如果数学成绩还相等 就按姓名字典序升序排序 输入 第一行是一
  • Python中MongoDB的使用方法

    一 MongoDB是什么 在百度上查询的时候主要看到三个关键字 数据库 非关系型 查询功能强大 总结为查询功能强大的非关系型数据库 什么是数据库 应该是用来存储数据的 非关系型的意思 不不不 关系型的意思我都不懂 查询功能强大的意思应该是查
  • python matplotlib pyplot绘制散点图

    pyplot散点图示例 import matplotlib pyplot as plt import numpy as np import math import random plt rcParams font sans serif Si
  • 【Blender】快捷键整理

    Z 弹出着色模式菜单 shift Z 线框展示 Ctrl 空格 最大化视窗切换 N 隐藏侧栏 T 显示隐藏左侧工具菜单 小键盘 在视口内最大化显示当前选择物体 FN home 在视口内最大化显示场景内所有物体 SHIFT C 查看全部 sh
  • N沟道和P沟道MOS管的四个不同点

    作者 快捷芯 功率半导体创新品牌 1 芯片材质不同 虽然芯片都是硅基 但是掺杂的材质是不同 使得N沟道MOS管是通过电子形成电流沟道 P沟道MOS管是用空穴流作为载流子 具体原理可以参考一些教科书 属于工艺方面的问题 2 同等参数P沟道MO

随机推荐