我有一个显示广告(不是我的广告)的网络视图,问题是当用户单击“x”按钮退出广告时,广告仍将它们定向到网站。我想知道的是,由于我无法控制广告,我可以改为禁用网页视图内的页面定向/转发吗?这意味着即使用户单击我的 webview 中的链接,也不会发生任何事情。
3 回答
你正在寻找WebClient.shouldOverrideUrlLoading
方法。
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading (WebView view, String url){
//True if the host application wants to leave the current WebView and handle the url itself, otherwise return false.
return true;
}
});
我尝试使用 shouldOverrideUrlLoading,但没有用。看起来这个方法只在加载 html 时调用一次。之后,您单击一个链接,但不再调用该方法。
我也在制作一个嵌入 Youtube Player 的 WebView。我更喜欢在浏览器中打开广告,而不是从 WebView 转发广告重定向。所以我重写了 onLoadResource 方法:
@Override
public void onLoadResource(final WebView view, final String url) {
if(url.indexOf("googleadservices.")>-1){
view.getSettings().setJavaScriptEnabled(false);
view.stopLoading();
view.postDelayed(
new Runnable(){
@Override
public void run(){
Uri uri=Uri.parse(url);
Intent i=new Intent(Intent.ACTION_VIEW,uri);
i.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(i);
}
}
,100
);
}
}
有效。当我点击广告链接时,会打开一个新的浏览器,在该浏览器中可以很好地显示广告网站,并且 WebView 没有被重定向。当我按下返回按钮时,WebView 再次出现,我可以继续观看视频。
但仍然存在问题。如果我多次重复打开浏览器并返回 WebView,WebView 可能无法阻止重定向到广告网站。它只是被重定向到广告网站。如果幸运的话,我可以重复打开和返回 100 次。但有时当我重复几次时它就失败了。我不知道为什么。
有没有人知道如何改进它?还是有其他方法可以禁用广告重定向?
您可以构建未检测到的 webview build-id adblocker
我知道现在回答这个问题为时已晚,但是,为了其他有同样问题的人。
好吧,你可以构建webview build-id adblocker,如果你希望阻止广告加载,并为用户提供流畅的体验,我很有信心,因为我已经在may app中实现了它。
理念
是拥有所有可能的广告服务域名的黑名单,然后在 webview 加载资源时,您将阻止从黑名单域加载。所以这取决于你在黑名单中有多少个广告服务域,幸运的是,有一个网站(pgl.yoyo.org/as/)为你提供了很长的广告服务域名称列表,并列出它们有多种口味。你可以阅读这篇文章:
,只要您按照分步说明进行操作,您将构建它 %100。
我们需要做的总结:
- 从 pgl.yoyo.org 获取广告主机名列表。
- 将列表保存在某处,在应用程序启动时加载它。
- 用于
WebViewClient.shouldInterceptRequest(WebView, String)
拦截请求。 - 检查请求 URL 是否属于列表中的主机名之一并覆盖它,返回一个虚拟资源而不是实际资源,这应该是广告