要想对Webview实现一些高级操作,需要使用WebViewClient,下面是关于Webview的几个常用回调函数:

1、public boolean shouldOverrideUrlLoading(WebView view, String url): 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。2、public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error):重写此方法可以让webview处理https请求。3、public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event):重写此方法才能够处理在浏览器中的按键事件。4、 public void onLoadResource(WebView view, String url):在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。5、 public void onPageStarted(WebView view, String url, Bitmap favicon) :在页面加载开始时调用。6、public void onPageFinished(WebView view, String url) :在页面加载结束时调用。

最初的想法是拦截广告就是拦截加载广告的js,上面的onLoadResource似乎是很合适的函数,只要判断onLoadResource的参数url是否是加载广告js的即可,如果不是广告相关的url正常加载,如果是则不加载。但是在使用onLoadResource之后才发现根本不行。这里引用WebViewClient另外一个回调函数:public WebResourceResponse shouldInterceptRequest(WebView view, String url)。

在Webview加载资源时会回调shouldInterceptRequest函数,我们可以通过重写shouldInterceptRequest函数实现对webview的资源请求进行处理。进行处理后返回数据。如果主程序返回的数据为null,WebView会自行请求网络加载资源。这里有个坑:不是shouldInterceptRequest函数返回null就能屏蔽掉请求!正确的屏蔽请求的方式:

//网络请求部分

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

LogUtils.paintE(true,"地址:"+url,this);

url = url.toLowerCase();

Map allowMap = webView.getAllowMap();

if (allowMap.size() == 0){

return super.shouldInterceptRequest(view, url);

}else {

if(HttpUtil.allowUrl(url,allowMap)){

return super.shouldInterceptRequest(view, url);

}else{

//去掉广告

return new WebResourceResponse(null,null,null);

}

}

}

重写一个webview,在webview中添加一个map,保存允许通过的url,在allowUrl()方法中判断当前请求的url是否在map集合中,如果存在则允许访问,如果map集合中没有指定url,也允许访问。

注意:不是shouldInterceptRequest函数返回null就能屏蔽掉请求!需要这样返回return new WebResourceResponse(null,null,null);

在网络大环境下,http劫持广告很难从源头杜绝。随着越来越多的app嵌入h5,会有越来越多的人在手机端遇到这种劫持广告,作为开发者,一定不要觉得说,这是用户使用免费wifi的原因或者这是运营商的植入广告。我们有的时候改变不了大环境,那么我们做出更多的努力,在app端让劫持广告更难成功。

举报/反馈

android自带的webview有广告,android webview 拦截广告相关推荐

  1. android自带的nsd发现服务器,Android NSD(网络服务发现)是否与iOS中的Bonjour服务兼容?...

    I will create a server-less local networking App for iOS and Android. the App in both iOS and Androi ...

  2. android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用

    Android的网络服务发现协议(NSD)可以用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会非常有帮助. Android的NSD的使用方法大致上分为四种操作: 1 ...

  3. android自带下拉阻尼动画,android 有阻尼下拉刷新列表的实现方法

    本文将会介绍有阻尼下拉刷新列表的实现,先来看看效果预览: 这是下拉状态: 这是下拉松开手指后listView回滚到刷新状态时的样子: 1. 如何调用 虽然效果图看起来样子不太好看,主要是因为那个蓝色的 ...

  4. android自带下拉阻尼动画,Android实现简单的下拉阻尼效应示例代码

    OS的下拉上拉都会出现一个很玄的动态效果.在Android中,虽然可以实现类似的效果,但有点不同的是,如果调用overScrollBy来实现类似的阻尼效应的话,最顶部会出现一片亮的区域,让人感觉不是很 ...

  5. android自带的nsd发现服务器,Android NSD不会发现所有服务

    我试图运行一个应用程序使用Android本地服务发现,但有时当我运行该应用程序,它不会发现我的网络的所有服务.我运行的代码从 https://github.com/joeluchoa/nsd使用四个星 ...

  6. android用来显示界面的组件,Android 自学之基本界面组件(上)

    文本款(TextView)和编辑框(EditText)的功能和用法 TextView直接继承了View,他还是EditText.Button两个UI组件的父类,TextView的作用就是在界面上显示文 ...

  7. 记一次使用 android 自带 WebView 做富文本编辑器之API、机型的兼容及各种奇葩bug的解决...

    转载请声明出处(http://www.cnblogs.com/linguanh/) 目录 1,测试设备介绍 2,开源项目richeditor及CrossWalk的选择 3,遇到的bug及其解决方法 4 ...

  8. Android开发-WebView中实现Android调用JS JS调用Android 【三】

    老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面,注册 ...

  9. android webview 重定向 goback,Android WebView 网址重定向影响 goBack

    我们在使用 Android 自带的控件 WebView 访问某网址的时候, 网址会通过某些方式进行重定向. 这时会出现一个问题. 我们在使用 Android 自带的控件 WebView 访问某网址的时 ...

最新文章

  1. 《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装
  2. C++描述的位运算总结
  3. WINCE的FFMPEG交叉编译环境搭建
  4. WebDriver 小毛笔记(二)准备工作
  5. annotationdriven
  6. 【VS开发】CString 转为 char *方法大全
  7. 建筑与建筑群综合布线系统工程验收规范_如果这9个方面考虑周到 你的综合布线系统工程可以竣工验收了...
  8. 句句真研—每日长难句打卡Day13
  9. Service Started!!!-end In Service while
  10. Codeblock一直卡在编译界面
  11. matlab基于凹点匹配的分割算法,基于凹点寻找标记的分水岭算法分割粘连谷粒
  12. eas bos根据合同类别过滤自定义核算项目
  13. swarm测试网如何查票?查票流程
  14. 我运营公众号这一个月
  15. 支付宝免费领取7天优酷黄金会员 1.88元购买1个月优酷黄金会员
  16. 这是我见过最干净的系统(WIN10 LTSC 2019)
  17. Python:语音处理,实现在线朗读RFC文档或本地文本文件
  18. 为什么总有一些程序员,持续陷入焦虑、无法幸福?
  19. 导出Excel功能的3种实现
  20. tuxedo错误码6_tuxedo错误解析和常用配置说明

热门文章

  1. 2021-02-14
  2. SuperMap GIS BIM类型数据处理 QA
  3. Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering 论文阅读
  4. linux centos用smartctl 打开硬盘写缓存
  5. 问题 B: 【计算几何】Two Circles and a Rectangle
  6. C语言——医院挂号系统(队列)
  7. 服务器.bat文件启动闪退,直接双击启动tomcat中的startup.bat闪退原因及解决方法
  8. 循环(环形)缓冲区之Boost::circular_buffer
  9. 对项目经理而言,PMP认证是否对职业生涯的发展有帮助?
  10. 从事游戏开发需要什么技能