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

如何禁用Android WebView中的链接、页面及引用加载行为?

解决WebView禁用链接/图片跳转的问题

嗨,作为Android新手,你遇到的这个问题其实很好解决!核心问题出在你自定义的MyWebViewClient里的shouldOverrideUrlLoading方法实现——你之前的代码是让WebView继续加载新URL,这和你想要禁用跳转的需求完全相反。

关键修改点

要阻止WebView加载新链接,你只需要:

  1. 在shouldOverrideUrlLoading方法里不要调用view.loadUrl(url)
  2. 直接返回true,告诉WebView:这个URL我们自己处理(这里就是啥也不做,自然就不会跳转了)
  3. 为了兼容Android 7.0及以上版本,还要实现重载的shouldOverrideUrlLoading(WebView view, WebResourceRequest request)方法,因为新版本系统会优先调用这个方法

完整修改后的代码

public class MainActivity extends AppCompatActivity {
    ProgressBar progressBar;
    WebView webView;
    String url="http://example.com";
    TextView textView;
    //to hide progressbar after loading part 1
    LinearLayout liProgressContainer;
    private String currentUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        webView = (WebView) findViewById(R.id.webView);
        textView = (TextView) findViewById(R.id.tvLoadingPercentage);
        //to hide progressbar after loading part 2
        liProgressContainer = (LinearLayout) findViewById(R.id.liProgressContainer);

        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                progressBar.setProgress(progress);
                textView.setText(progress + " %");
            }
        });
        webView.setWebViewClient(new MyWebViewClient());
        WebSettings browserSetting = webView.getSettings();
        browserSetting.setJavaScriptEnabled(true);
        webView.loadUrl(url);
    }

    //back button function
    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            liProgressContainer.setVisibility(View.VISIBLE);
            super.onPageStarted(view, url, favicon);
        }

        // 兼容旧版本Android的方法
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // 直接返回true,不加载新URL,禁用跳转
            return true;
        }

        // 兼容Android 7.0及以上版本的方法
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            // 同样返回true,阻止跳转
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            liProgressContainer.setVisibility(View.GONE); //hide header part
        }
    }
}

为什么这样修改?

  • shouldOverrideUrlLoading方法的作用是决定WebView是否要加载新的URL:返回true表示我们自己处理这个请求(这里我们啥也不做,就不会跳转);返回false则让WebView正常加载新URL。
  • 加上Android 7.0+的重载方法,是因为从API 24开始,系统会优先调用带WebResourceRequest参数的版本,只写旧版本的方法可能会失效。

这样修改后,不管是点击网页里的链接还是触发跳转的图片,WebView都不会加载新内容了,完美符合你的需求!

内容的提问来源于stack exchange,提问作者Mr.Mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:01:31