额,还是那个WebView的问题,内核已换成腾讯X5内核,所以接下来的内容会有一些X5内核的方法。但我们的H5是不能改的,还是只有委屈我们自己。先看看H5自带的弹窗

这样子的弹窗在不同的手机上呈现的可能是不同的效果,效果不统一,你家产品经理看了会高兴吗?哈哈哈。 其中,onJsPrompt弹出的内容在我们现在的项目上是无意义的。这个是之前AngularJS和Cordava项目。于是乎,对于onJsPrompt弹窗,我的做法是:

     @Overridepublic boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {//在defaultValue或message中,会返回一个url,我们项目中的下载的文件都是File路径下//如果不是File文件,则直接返回true来屏蔽弹窗。if (!defaultValue.contains("File") && !message.contains("File")) {result.confirm();return true;}result.confirm();webView.loadUrl(message);return true;}
复制代码

result.confirm();就是默认点确定,同理result.cancel();是取消操作

这样就可以轻松地屏蔽gay_init:2这样的无意义弹窗了,具体的可以根据message或者defaultValue的值来判断是否执行其他操作。 接下来是onJsAlert和onJsConfirm类型的,这样的弹窗我可是一眼就辨别出来了,因为从按键个数基本确定,onJsAlert只有一个,onJsConfirm嘛,肯定是有一个取消一个确定了。如果不能确定类型,可以分别复写几个方法,打上断点或者Log一下,也可以找到。

既然他俩就一个按键的区别,那就只贴onJsConfirm的了。样式是仿照IOS的效果来的,background自定义的,需要的留言,我只贴主要的,毕竟本文主要是讲WebView的。

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/title"android:layout_width="match_parent"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/content"android:layout_width="match_parent"android:layout_height="wrap_content" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/certain"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="确定" /><Buttonandroid:id="@+id/cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/x1"android:layout_weight="1"android:text="取消"/></LinearLayout>
</LinearLayout>
复制代码

类里面:

    private AlertDialog confirmDialog;private boolean isCertain;@Overridepublic boolean onJsConfirm(WebView webView, String url, String message, final JsResult result) {confirmDialog = new AlertDialog.Builder(getContext(), R.style.alert_dialog_style).create();View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.window_user, null);TextView title = (TextView) view.findViewById(R.id.title);TextView content = (TextView) view.findViewById(R.id.content);Button cancel = (Button) view.findViewById(R.id.cancel);Button certain = (Button) view.findViewById(R.id.certain);title.setText("操作提示");//直接将返回的message信息设置到布局中content.setText("" + message);confirmDialog.setView(view);cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {confirmDialog.dismiss();isCertain = false;}});certain.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {confirmDialog.dismiss();isCertain = true;}});confirmDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {//根据isCertain来判断用户希望执行的是确定还是取消操作if (isCertain) {result.confirm();} else {result.cancel();}}});confirmDialog.show();WindowManager.LayoutParams params = confirmDialog.getWindow().getAttributes();params.width = (int) (ScreenUtils.getScreenWidth() * 0.9);params.height = LinearLayout.LayoutParams.WRAP_CONTENT;confirmDialog.getWindow().setAttributes(params);return true;}
复制代码

效果嘛,就这样啦。

一直以来,WebView对我来说是一个很难控制但是又不得不用的重要组件。经历了很多坑,包括谷歌大佬埋下的。不管怎么说,我们在遇到问题的时候,要不畏艰难,迎难而上。没有问题,制造问题,也要上。不要怂,就是干!共勉。

转载于:https://juejin.im/post/5a313cdc51882575cb741bd5

Android 自定义WebView弹窗及屏蔽弹窗相关推荐

  1. Android 自定义WebView 实现可以加载缓存数据

    1.自定义WebView说明 1.1.这个WebView可以加载缓存的数据.(需要后端配合,将html转换成一个字符串,主要是图片要用特殊格式) 1.2.注入了图片链接,为了方便点击webView中的 ...

  2. android 自定义权限弹窗_Android-开源通用弹窗的封装CommonPopupWindow(总得向别人学点什么)...

    终于也是自己封装一些东西了,不管烂不烂,还是自我鼓励了一把!(之前学maven发布也是这个目的) 开源地址: FanChael/CommonPopupWindow 弹窗效果如下: @tip后面会逐渐完 ...

  3. Android弹出自定义Dialog,android自定义Dialog实现底部弹窗

    android自定义Dialog实现底部弹窗 拿到这个需求,很多人都是直接想用popWindow 实现,但是这样的效果我们完全可以根据系统的Dialog 自定义一个. AlertDialog.Buil ...

  4. android波纹效果弹窗,Android自定义View实现波纹效果

    Android自定义View实现波纹效果 时间:2017-05-27     来源:移动互联网学院 1.引言:随着Android智能手机的普及,Android应用得到了大力支持,而Android应用的 ...

  5. 计算机安全弹窗,怎么屏蔽网站的弹窗广告保卫电脑安全

    上网浏览网站,总有一些网站上的弹窗广告影响我们浏览网站的体验感,甚至有的一些弹窗广告严重影响到了我们的电脑安全,那么如何有效的屏蔽这些网站的弹窗广告呢?下面学习啦小编告诉你! 屏蔽网站的弹窗广告保卫电 ...

  6. 简易记事本广告弹窗_人民日报批弹窗广告,教你几个屏蔽弹窗广告的小技巧

    弹窗广告,对于经常上网的人来说,一定不陌生."不请自来"以及"赖着不走",可以说是弹窗广告的最大特征.天下网友苦弹窗广告久矣-- 近日,人民日报刊文<&q ...

  7. Android 自定义ViewPager设置屏蔽左右滑动事件

    只要有欲望,就应该有奋斗的心.... 屏蔽左右滑动事件的viewPager public class CustomNoScrollViewPager extends ViewPager{private ...

  8. Android变量longpress,Android:在自定义WebView中从onLongPress打开ContextMenu

    我目前正在尝试获取一个自定义WebView,当它被按下较长时间时会显示一个ContextMenu.由于默认WebView类仅在链接为longPressed时显示ContextMenu,因此我编写了自己 ...

  9. android弹出自定义layout菜单,Android:PopWindow — 对Android的底部弹窗、顶部弹窗菜单及自定义界面的使用封装...

    转载请注明出处:http://blog..net/hmyang314/article/details/70613478 PopWindow 对Android的底部弹窗,顶部弹窗菜单及自定义界面的使用封 ...

最新文章

  1. python 词云手把手_手把手教你生成炫酷的词云
  2. Android EditText回车不换行
  3. jsp 修改的员工select怎么_SpringBoot+Mybatis+Jsp 员工管理系统
  4. java action上传文件_java实现文件上传
  5. opencv30-图像矩
  6. QueryPerformanceFrequency使用方法--Windows高精度定时计数
  7. 禁用Chrome Frame
  8. 【AI应用】海康威视iVMS-4200软件安装
  9. window10下CUDA9安装和vs2015配置
  10. C#实现Winform程序自动进行版本升级更新
  11. 定时群发如何超过48小时,135编辑器这个功能帮你!
  12. 启动windows的mysql_MySQL的启动方法(windows 平台)
  13. 威锋十年:叫一声「果粉」,你还敢答应吗?
  14. 安卓中如何获取MD5码
  15. 为什么美团股价大跌:疫情影响、阿里竞争与模式弊病
  16. ocv特性_锂离子电池的三大特性分析
  17. 学会给视频添加渐入、色彩变幻特效,简单几步骤做创意小视频
  18. 上古卷轴3晨风职业_上古卷轴3晨风
  19. Windows server 2012R2 设置文件共享目录报错:无法连接到C$管理共享已验证文件夹xxx在计算机xxx上是否存在
  20. 这可能是你近 2 年发论文最好机会!

热门文章

  1. android icon命名规则,安卓手机的APP图标尺寸规范和图标命名规范
  2. hal库开启中断关中断_stm32的HAL库开发学习笔记之外部中断
  3. 修改计算机用户权限,如何修改一个电脑账户为最低权限
  4. Kafka2.0生产者客户端使用
  5. MapGIS转Shp文件的单位问题
  6. 使用Instant Client配置PL/SQL Developer
  7. openfire学习4---android客户端聊天开发之聊天功能开发
  8. 弹体飞行姿态仿真软件程序代写
  9. Struts2中过滤器,拦截器,监听器他们之间有什么区别?
  10. 理解Javascript_12_执行模型浅析