You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让WebView仅加载指定URL并拦截广告、弹窗等其他链接

嘿,我来帮你搞定这个WebView拦截问题!要让你的WebView只加载mywebsite.com,拦截所有广告、弹窗等外部链接,核心是通过自定义WebViewClient和处理新窗口请求这两个关键点实现,我给你一步步调整代码:

1. 拦截普通跳转链接

首先给WebView设置自定义WebViewClient,重写链接加载判断方法,只允许mywebsite.com域名下的URL加载:

webView.setWebViewClient(new WebViewClient() {
    // 适配Android 7.0+的方法
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        // 检查URL是否属于目标域名,不属于则拦截
        return !url.contains("mywebsite.com");
    }

    // 兼容Android 7.0以下版本的方法
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return !url.contains("mywebsite.com");
    }
});
2. 拦截弹窗(新窗口请求)

广告弹窗通常会触发新窗口创建,所以需要重写WebChromeClient的onCreateWindow方法,阻止外部弹窗加载:

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        // 获取弹窗请求的URL
        WebView.HitTestResult result = view.getHitTestResult();
        String url = result.getExtra();
        // 仅允许目标域名的弹窗在当前WebView加载,其他直接拦截
        if (url != null && url.contains("mywebsite.com")) {
            view.loadUrl(url);
        }
        // 返回true表示我们自行处理该请求,不创建新窗口
        return true;
    }
});
3. 可选优化:拦截第三方资源加载

如果还想拦截页面内的第三方广告资源(比如广告图片、脚本),可以在WebViewClient里再加一个拦截方法:

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    String url = request.getUrl().toString();
    if (!url.contains("mywebsite.com")) {
        // 返回空响应,直接拦截资源加载
        return new WebResourceResponse(null, null, null);
    }
    return super.shouldInterceptRequest(view, request);
}
整合后的完整代码

把以上逻辑整合到你的onCreate方法里,最终代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    customViewContainer = (FrameLayout) findViewById(R.id.customViewContainer);
    webView = (VideoEnabledWebView) findViewById(R.id.your_webview_id); // 替换成你的WebView实际ID

    // 基础WebView配置(按需调整)
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true); // 若网站依赖JS则开启
    webSettings.setSupportMultipleWindows(true); // 必须开启才能处理弹窗请求

    // 设置自定义WebViewClient拦截链接和资源
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            return !url.contains("mywebsite.com");
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return !url.contains("mywebsite.com");
        }

        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            if (!url.contains("mywebsite.com")) {
                return new WebResourceResponse(null, null, null);
            }
            return super.shouldInterceptRequest(view, request);
        }
    });

    // 设置WebChromeClient拦截弹窗
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            WebView.HitTestResult result = view.getHitTestResult();
            String url = result.getExtra();
            if (url != null && url.contains("mywebsite.com")) {
                view.loadUrl(url);
            }
            return true;
        }
    });

    // 加载初始目标网站
    webView.loadUrl("https://mywebsite.com");
}

内容的提问来源于stack exchange,提问作者AflamZone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:35:09