Android 瀏覽器(如 QQ 瀏覽器、Chrome)實現「不加載圖片」主要有兩條路徑:
WebSettings settings = webView.getSettings();
settings.setBlockNetworkImage(true); // API 19+ (KitKat)
// 或舊版
settings.setLoadsImagesAutomatically(false); // 完全禁用圖片加載
WebViewClient.shouldInterceptRequest() (API 21+) 或 onPageFinished() 注入 JS。Jsoup 或正則提取所有 <img> 標籤的 src/data-src。src 移至 data-original,src 指向 1px 透明佔位圖或 Base64 灰色塊。class="lazy-img"、onclick="loadImage(this)"。function loadImage(el) {
el.src = el.dataset.original;
el.onload = () => el.classList.add('loaded');
// 通知 Android 端可選:統計、預加載鄰近圖片
Android.onImageLoad(el.dataset.original);
}
Android 端:webView.addJavascriptInterface(new JsBridge(), "Android");
自定義 WebViewClient 返回自定義 WebResourceResponse,在 shouldInterceptRequest 中判斷 URL 後綴(.jpg/.png/.webp)或 Content-Type,直接返回空響應或佔位圖流。
缺點:無法處理 HTTPS(需 MITM 憑證)、無法處理 Data URI、Base64 內嵌圖片。
| 需求 | 推薦方案 | 關鍵 API |
|---|---|---|
| 全局省流量模式 | WebView 內置設置 | setBlockNetworkImage(true) |
| 懶加載/點擊顯示/圖片壓縮 | HTML 解析 + JS 注入 | Jsoup, shouldInterceptRequest, addJavascriptInterface |
| 廣告圖片過濾/隱私保護 | 網絡層攔截 + 規則庫 | OkHttp Interceptor, EasyList 規則 |
選對層級(設置/解析/網絡),圖片屏蔽從「一行代碼」到「完整圖片加載框架」皆可掌控。