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

如何让Android应用WebView的广告链接跳转至系统浏览器打开?

解决WebView中广告跳转系统浏览器的问题

嘿,我太懂你这个烦恼了——广告在WebView里加载直接冲掉正在看的视频,确实糟心!其实只需要给你的WebViewClient加一段逻辑,就能让广告链接直接跳去系统浏览器打开,完全不影响视频播放。

核心思路

我们要重写WebViewClient的shouldOverrideUrlLoading方法,这个方法会在WebView准备加载新链接时触发。我们可以在这里区分“视频相关链接”和“广告链接”:如果是广告类的外部链接,就调用系统浏览器打开它,同时告诉WebView别自己加载;如果是视频页面本身的链接,就让WebView正常处理。

修改后的完整代码

WebView displayVideo = findViewById(R.id.webView);
displayVideo.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon){
        super.onPageStarted(view, url, favicon);
        progressBar.setVisibility(View.VISIBLE);
        setTitle("Loading...");
    }

    @Override
    public void onPageFinished(WebView view, String url){
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.GONE);
        setTitle(view.getTitle());
        view.loadUrl("javascript:onPageFinished();");
    }

    // 新增的关键方法:控制链接跳转行为
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // 这里可以根据实际需求调整判断逻辑
        // 示例1:所有外部http/https链接都跳系统浏览器(适合你的本地HTML加载场景)
        if (url.startsWith("http://") || url.startsWith("https://")) {
            // 调用系统浏览器打开链接
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(browserIntent);
            // 返回true,告诉WebView不要自己加载这个链接
            return true;
        }
        // 视频页面内部的链接(比如锚点、本地资源),让WebView正常加载
        return false;
    }
});

WebSettings webSettings = displayVideo.getSettings();
webSettings.setJavaScriptEnabled(true);
displayVideo.loadData(frameVideo, "text/html", "utf-8");
webSettings.setMediaPlaybackRequiresUserGesture(false);

关键细节解释

  • shouldOverrideUrlLoading:这个方法是控制跳转的核心,返回true表示WebView放弃加载该链接,交给我们自定义处理;返回false则让WebView正常加载。
  • 精准判断广告链接:如果你知道广告的特定域名,可以把判断逻辑改成更精准的版本,比如:
    // 示例2:只拦截指定广告域名的链接
    if (url.contains("ad-example.com") || url.contains("another-ad-site.net")) {
        // 跳系统浏览器的逻辑
        return true;
    }
    
  • Intent.ACTION_VIEW:这个系统Action会自动唤起默认浏览器打开目标URL;FLAG_ACTIVITY_NEW_TASK则确保浏览器在独立的任务栈中启动,不会和你的应用栈互相干扰。

这样修改后,广告链接就会直接跳去系统浏览器,你的WebView里的视频就能稳稳播放不被打断啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:31