需求:WebView 加載頁面後,隱藏頂部廣告區塊。最簡潔方案是通過 `WebViewClient` 攔截請求或注入 JS 移除廣告 DOM。
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
// 注入 JS 隱藏廣告容器
String js = "javascript:(function() { " +
"var ad = document.querySelector('.ad-header, #top-banner, [id*=\"ad\"]'); " +
"if (ad) ad.style.display = 'none'; " +
"})()";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.evaluateJavascript(js, null);
} else {
view.loadUrl(js);
}
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
// 匹配廣告域名/路徑關鍵字
if (url.contains("ads.") || url.contains("/ad/") || url.matches(".*\\.ad\\..*")) {
return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));
}
return super.shouldInterceptRequest(view, request);
}
});
| 方案 | 優點 | 缺點 |
|---|---|---|
| JS 注入 | 靈活、可針對具體 DOM、不影響其他資源加載 | 頁面渲染後才隱藏,可能閃現 |
| 請求攔截 | 源頭阻斷、節省流量、無閃現 | 需維護廣告 URL 規則、可能誤殺 |