webview中的Android块广告
我想在自定义webview客户端(无JavaScript注入)中实现一种机制来阻止广告。这是一种捕获广告并将其替换为来自可信来源的其他广告的方法吗?webview中的Android块广告,android,browser,webview,ads,Android,Browser,Webview,Ads,我想在自定义webview客户端(无JavaScript注入)中实现一种机制来阻止广告。这是一种捕获广告并将其替换为来自可信来源的其他广告的方法吗? 要实现这一点,您有两个选择: 使用Javascript注入代码来实现这一点(您明确地说,这是您不想要的) 在WebView中,代替“加载”(当然是正确转义),并将“myproxy.com”设置为一个代理,它将获取上游页面(在“t”查询参数中给出,或以任何其他方式给出),并在向客户端发送响应之前用受信任的页面替换ads。这将是相当复杂的,虽然,因为广
要实现这一点,您有两个选择:
要获得更深入的解释和一个示例,我建议您查看一下。我制作了一个自定义的
WebViewClient
类似:
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) { }
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp4")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
view.getContext().startActivity(intent);
return true;
} else if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:")
|| url.startsWith("mms:") || url.startsWith("mmsto:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
view.getContext().startActivity(intent);
return true;
} else {
return super.shouldOverrideUrlLoading(view, url);
}
}
private Map<String, Boolean> loadedUrls = new HashMap<>();
@SuppressWarnings("deprecation")
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
boolean ad;
if (!loadedUrls.containsKey(url)) {
ad = AdBlocker.isAd(url);
loadedUrls.put(url, ad);
} else {
ad = loadedUrls.get(url);
}
return ad ? AdBlocker.createEmptyResource() :
super.shouldInterceptRequest(view, url);
}
}
webview.setWebViewClient(new MyWebViewClient());
在Javascript注入的情况下,你能给我一个例子吗?或者如果你有一个链接可以帮助我,那就太好了。用JS的方式来做恐怕也不容易。您可以在这里获得AdBlock源代码:,您需要对其进行一些修改。我不知道还有其他类似的好的开源项目。你能帮我提供更多关于你的第二个答案的详细信息吗?可能是一些代码步骤。从上次开始,我一直在努力寻找各种提示,但没有任何效果(或者它只在一些api版本上起作用)@kamituel…我找到了如何配置本地代理的方法,但我不知道如何从本地代理加载url这是正确的答案。链接的博客文章包含一个带有示例代码的详细说明。如何启用和禁用adblocker
webview.setWebViewClient(new MyWebViewClient());