1

我有一个显示广告(不是我的广告)的网络视图,问题是当用户单击“x”按钮退出广告时,广告仍将它们定向到网站。我想知道的是,由于我无法控制广告,我可以改为禁用网页视图内的页面定向/转发吗?这意味着即使用户单击我的 webview 中的链接,也不会发生任何事情。

4

3 回答 3

6

你正在寻找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;
   }
 });
于 2013-08-09T16:35:38.877 回答
0

我尝试使用 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 次。但有时当我重复几次时它就失败了。我不知道为什么。

有没有人知道如何改进它?还是有其他方法可以禁用广告重定向?

于 2014-12-02T05:09:25.510 回答
0

您可以构建未检测到的 webview build-id adblocker

我知道现在回答这个问题为时已晚,但是,为了其他有同样问题的人。

好吧,你可以构建webview build-id adblocker,如果你希望阻止广告加载,并为用户提供流畅的体验,我很有信心,因为我已经在may app中实现了它。

理念

是拥有所有可能的广告服务域名的黑名单,然后在 webview 加载资源时,您将阻止从黑名单域加载。所以这取决于你在黑名单中有多少个广告服务域,幸运的是,有一个网站(pgl.yoyo.org/as/)为你提供了很长的广告服务域名称列表,并列出它们有多种口味。你可以阅读这篇文章:

如何实现 webview build-id adblocker

,只要您按照分步说明进行操作,您将构建它 %100。

我们需要做的总结:

  • 从 pgl.yoyo.org 获取广告主机名列表。
  • 将列表保存在某处,在应用程序启动时加载它。
  • 用于WebViewClient.shouldInterceptRequest(WebView, String)拦截请求。
  • 检查请求 URL 是否属于列表中的主机名之一并覆盖它,返回一个虚拟资源而不是实际资源,这应该是广告
于 2018-05-23T06:57:17.893 回答