在 WebView 中完成 AdBlock

2024-05-17

我即将在我的 Android 应用程序中推出 WebView AdBlocking。我想知道这是否会有效地阻止广告,或者在 Webview 本身内是否还有更多工作要做(我尚未修改)。基本上我有一个存储在 Android 资产中的主机文件,其中列出了数百个广告服务器站点。我将此文件读入 AdBlocker,然后将其应用到 WebViewClient 中,如下所示:

// AdBlocker.isAdURL(String url)

 public Boolean isAdURL(String url){
      Boolean retValue = false;
      if ((url == null) || (url.isEmpty()))
        return false;
      if ((adServers == null)|| (adServers.size() <1))
        return false;
      try{
        String domainName = getUrlsDomain(url);
        if (adServers.contains(domainName)) {
            retValue = true;
        }
    } catch(URISyntaxException e){

    }

    return retValue;
}

我只在 WebViewClient 中使用它,如下所示:

@Deprecated
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

      if (adBlocker.isAdURL(url)) {
         ByteArrayInputStream nada = new ByteArrayInputStream("".getBytes());
        return new WebResourceResponse("text/plain", "utf-8", nada);
     }
    return super.shouldInterceptRequest(view, url);
}

同样:

 @Override
 public WebResourceResponse shouldInterceptRequest(WebView view,  WebResourceRequest request) {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        if (adBlocker.isAdURL(request.getUrl().toString())) {
            ByteArrayInputStream nada = new    ByteArrayInputStream("".getBytes());
            return new WebResourceResponse("text/plain", "utf-8", nada);
        }

    }

    return super.shouldInterceptRequest(view, request);
}

还有什么需要做的吗?或者就是这样?是否需要保留白名单,或者假设我的广告服务器列表是最新的,这通常会起作用吗?


这个实现与上面的基本相同科尔多瓦的“白名单”功能 https://cordova.apache.org/docs/en/2.5.0/guide/whitelist/。他们还使用shouldInterceptRequest用于阻止对非白名单站点的请求。这种方法有已知的简写,例如它不会捕获通过 WebSockets 协议完成的请求(请参阅),但总的来说,这是一个推荐方法 http://info.nowsecure.com/rs/nowsecure/images/secure-mobile-development.pdf(寻找shouldInterceptRequest在那份文件中)。

为了做得更好,您需要自己加载所有内容(使用某些 HTTP 客户端),过滤并清理内容,然后将结果传递给 WebView 以便渲染。例如,GMail Android 应用程序就是这样工作的(它们在服务器上进行实际的清理,但也可以在设备上进行)。

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

在 WebView 中完成 AdBlock 的相关文章

随机推荐

  • Laravel 广播:通知与事件

    我阅读了 laravel 文档Events and Notifications 似乎我们可以触发一个事件 并从该事件中触发 使用ShouldBroadcast接口 将其广播到我理解的 laravel echo 另一方面我们可以使用通知via
  • 有没有办法禁用网站上表单的自动填写? [复制]

    这个问题在这里已经有答案了 我最近才学会使用创建网站HTML and PHP 我创建了一个网站 其中有一个测验 要求人们随机翻译单词 用户将他们的答案输入到表格中 网站评估答案是否正确 现在 当一个问题在一个会话中被问两次时 就会出现自动填
  • 如何在Eclipse中集成CSS预处理? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 Eclipse 中编辑 SCSS 文件 最好使用语法突出显示 scss files 我发现这些资
  • 如果其中一台机器死机,TCP 连接如何终止?

    如果两个主机 A 和 B 之间建立了 TCP 连接 假设主机 A 已向主机 B 发送了 5 个八位字节 然后主机 B 崩溃了 由于未知原因 主机 A 将等待确认 但如果没有收到确认 将重新发送八位字节并减小发送者窗口大小 这将重复几次 直到
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • AXI4 流接口:如何在 HLS 中管理浮点数组以生成硬件加速器并在 RTL 项目中安全地连接它们?

    最后 我想做的是使用 Vivado Design Suite 中具有单精度浮点数组的流接口来构建硬件加速器 HLS 用户指南UG902 http www xilinx com support documentation sw manuals
  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • React Native Android 发布 apk 是调试,而不是发布

    我有一个现有的 Android 应用程序 我已根据以下内容将 React Native v0 30 活动添加到项目中docs http facebook github io react native releases next docs i
  • 如何在 C# 中将 MemberExpression 实例组合为 LambdaExpression?

    给定一个这样的类 public class AnEntity public int prop1 get set public string prop2 get set public string prop3 get set 我能够生成一个
  • 为什么LeNet5使用32×32图像作为输入?

    我知道mnist数据集中的手写数字图像是28 28 但是为什么LeNet5中的输入是32 32 您的问题已在原纸 http yann lecun com exdb publis pdf lecun 98 pdf 卷积步骤始终采用比前一层的特
  • 为多模块项目创建所有 jar 和源 jar 的存档

    我正在构建一个 Maven 项目 其中有六个模块 我可以自己使用 Maven 或 Ivy 导入它 但其他团队也想使用这些 jar 但他们的做法是将 jar 和源 jar 提交到版本控制 我想生成所有模块及其源代码的 zip tar 程序集
  • 如何获取字符串的最后一个单词?

    我有一个批处理文件 它以文件路径作为参数 set filePath 1 现在 假设文件路径是 C Temp Folder 我想设置Folder在一个新变量中 我怎样才能做到这一点 我在网上搜索了一下 所有的解决方案都是这样的 for A i
  • 访问角落里的存储

    我能找到的与文件存储有关的最接近文档的是这个帖子 http nookdeveloper zendesk com entries 20257971 updated what are the size constraints on my app
  • 有没有办法同时拥有加密和非加密的主机变量?

    如果我加密host vars 文件与ansible vault 除了清单文件中的主机变量之外 我似乎没有机会拥有未加密的主机变量 我错过了什么吗 事实证明 http docs ansible com ansible intro invent
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • 从 SHAP 值中获取特征重要性

    我想要获得重要功能的数据框 通过下面的代码 我得到了 shap values 但我不确定这些值的含义是什么 在我的 df 中有 142 个特征和 67 个实验 但得到了一个带有 ca 的数组 2500 个值 explainer shap T
  • 使用 PortAudio 回调和 ASIO sdk 实现输入延迟

    我正在尝试使用 portaudio 库和 ASIO sdk 从我的计算机获取吉他的输入以进行演奏 我一直在关注官方网站上的一些教程来进行基础设置 目前我已经让它工作了 以便 portaudio 正在监听正确的输入和输出设备 并且我有回调设置
  • 调用 SwiftUI 中位置 #11、#12 处的额外参数 [重复]

    这个问题在这里已经有答案了 我在 SwiftUI 中的切换开关上不断收到 调用中位置 11 12 处有额外参数 错误 我见过其他人有 调用中的额外参数 错误 但答案似乎没有帮助 另外 我的错误是 位置 11 12 我还没有看到其他人发生这种
  • 在 WebView 中完成 AdBlock

    我即将在我的 Android 应用程序中推出 WebView AdBlocking 我想知道这是否会有效地阻止广告 或者在 Webview 本身内是否还有更多工作要做 我尚未修改 基本上我有一个存储在 Android 资产中的主机文件 其中