我有一个显示广告(而不是我的广告)的网页视图,问题是当用户点击“x”按钮退出广告时,广告仍将其定向到网站。我想知道的是因为我无法控制广告,我可以在网页视图中禁用页面导向/转发吗?这意味着即使用户点击我的网页视图中的链接,也不会发生任何事情。
答案 0 :(得分: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;
}
});
答案 1 :(得分:1)
我知道回答这个问题为时已晚,为了那些有同样问题的人。
好吧,你可以构建webview build-id adblocker,如果你想阻止广告加载,并为用户提供流畅的体验,我很有信心,因为我已经在may app中实现了它。
理念
是否有所有可能的广告服务域名的黑名单,然后在webview加载资源时,您将阻止从黑名单域加载。所以这取决于黑名单中有多少个广告服务域名,幸运的是,有一个网站(pgl.yoyo.org/as/)为您提供了很长的广告服务名称,并在很多列表中列出flavoures。 您可以阅读this文章:
,只要按照分步说明操作,就会构建%100。
我们需要做的总结:
WebViewClient.shouldInterceptRequest(WebView, String)
拦截
请求。答案 2 :(得分:0)
我尝试使用shouldOverrideUrlLoading,但它没有用。看起来这个方法只在加载html时被调用一次。之后,单击一个链接,但不再调用该方法。
我也在制作一个嵌入Youtube播放器的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次。但有时当我重复几次时,它就失败了。我不知道为什么。
今天有没有人知道如何改进它?或者是否有其他方法可以停用广告重定向?