在 Android WebView 里“拦截”通常分几种场景,下面按常见需求给你说明怎么实现。
重写 WebViewClient.shouldOverrideUrlLoading
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("block.com")) {
// 拦截,不加载
return true;
}
// 继续加载
return false;
}
});
✅ 适用:
myapp://)使用 shouldInterceptRequest
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.contains("ad.com")) {
// 返回空响应,拦截
return new WebResourceResponse("text/plain", "utf-8", null);
}
return super.shouldInterceptRequest(view, request);
}
});
✅ 适用:
⚠ 注意:
通过 addJavascriptInterface
webView.addJavascriptInterface(new Object() {
@JavascriptInterface
public void intercept(String data) {
// JS 调用了这个方法
}
}, "nativeObj");
JS 中:
window.nativeObj.intercept("hello");
✅ 适用:
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
| 需求 | 方法 |
|---|---|
| 拦截跳转 | shouldOverrideUrlLoading |
| 拦截资源 | shouldInterceptRequest |
| 拦截 JS | JavascriptInterface |
| 拦截返回 | onBackPressed |
如果你说的是 某个具体场景(比如微信 WebView、Hybrid、广告拦截、JSBridge、Android 15 新限制),可以告诉我,我给你更精确方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。