我通常使用shouldOverrideUrlLoading
来阻止网络视图中的广告,但是这次,新网站中的广告链接没有被捕获
public boolean shouldOverrideUrlLoading(WebView view, String url)
和
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
但它是在
中捕获的public WebResourceResponse shouldInterceptRequest(final WebView view, String url)
所以,我用了这种方法
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, String url) {
Log.d("soidfzs", url);
WebResourceResponse webResourceResponse = null;
if (url.contains("https://googleads") || url.contains("doubleclick") || url.contains("google-analytics.com") || url.contains("adservice") || url.contains("securepubads")) {
Log.d("soidfzs", "here");
return webResourceResponse;
} else {
return super.shouldInterceptRequest(view, url);
}
}
但是,链接仍在加载并显示广告
那么,我应该返回什么?
答案 0 :(得分:0)
您将在if语句之前返回设置为webResourceResponse
的{{1}},以检查请求是否针对广告。
null
的{{3}}指出:
shouldInterceptRequest
因此,在返回* @return A {@link android.webkit.WebResourceResponse} containing the
* response information or {@code null} if the WebView should load the
* resource itself.
时,您是在告诉WebViewClient加载资源本身,即满足广告请求并加载广告。
为了让请求滑动并返回您自己的值,您必须返回自己的null
实例,该实例不能为空,以使其正常工作。
WebResourceResponse
在这里,我将return new WebResourceResponse(
"text/html",
"UTF-8",
null
);
(第一个参数)设置为mimeType
,尽管也可能是其他东西,例如"text/html"
。
我将第二个参数"text/plain"
设置为encoding
(与以前相同:可能还有其他东西)。
现在最重要的部分是:我将第三个参数"UTF-8"
设置为data
。
这将导致WebView获得有效的null
实例,该实例不是WebResourceResponse
,但是没有数据,因此不会加载任何内容。
请注意,这将触发null
,因为WebView客户端实际上无法加载任何内容。这本身不是问题,但是如果您覆盖WebViewClient#onReceivedError
,则需要注意一些事项。