android广告拦截原理,WebView 广告拦截浅析

前言

查豆瓣 使用的是 WebView 加载页面,在豆瓣的移动页面中存在两到三个的广告轮播图,比较影响阅读体验。所以开始着手看看怎么屏蔽掉广告。

在 WebView 中有以下三个方法可以考虑:

fun onPageFinished(view: WebView, url: String)

fun shouldInterceptRequest(view: WebView, request: WebResourceRequest): WebResourceResponse?

fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean

复制代码onPageFinished方法会在页面加载完毕后回调

shouldInterceptRequest方法会通知 host Application,也就是启动 WebView 的应用返回WebResourceResponse。如果本地应用返回null,则webView会正常加载资源

shouldOverrideUrlLoading会在Url被加载前被回调。实现此方法,返回true时WebView将不会加载该Url,否则将会正常加载Url

此方法仅在主动或被动调用WebView.load(url)方法时才会回调,而页面中的资源加载时是不会被回调的

比如主动显式调用:webview.load(url)

被动则是页面中点击链接之后加载

此方法不适用于POST请求

基于上述三个方法,我们看看能否做到:

禁止加载广告域名

给广告域名请求返回空的数据

在页面加载完毕后消除广告占位的div或类似元素

1. 禁止加载广告域名

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebView拦截非http链接,例如file://、tel://、mailto://等,可以通过重写shouldOverrideUrlLoading方法来实现。以下是示例代码: ```java webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("http") || url.startsWith("https")) { // 如果链接以http或https开头,则继续加载链接 return false; } else { // 如果链接不是以http或https开头,则拦截链接并处理 if (url.startsWith("tel:")) { // 如果链接以tel:开头,则打电话 Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); } else if (url.startsWith("mailto:")) { // 如果链接以mailto:开头,则发送邮件 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("message/rfc822"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{url.substring(7)}); startActivity(Intent.createChooser(intent, "Send Email")); } else if (url.startsWith("file:")) { // 如果链接以file:开头,则打开本地文件 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "application/pdf"); startActivity(intent); } return true; } } }); ``` 在上面的示例中,我们首先检查链接是否以http或https开头。如果是,则继续加载链接。如果链接不是以http或https开头,则根据链接的协议进行相应的处理。例如,如果链接以"tel:"开头,则打电话;如果链接以"mailto:"开头,则发送邮件;如果链接以"file:"开头,则打开本地文件。最后,返回true以拦截链接。 请注意,如果您需要在Android 7.0及更高版本上拦截非HTTP链接,建议您使用shouldOverrideUrlLoading(WebView view, WebResourceRequest request)方法,因为shouldOverrideUrlLoading(WebView view, String url)方法在7.0及更高版本上已经过时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值