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

Android WebView点击链接跳转外部浏览器 如何实现应用内加载

问题原因

Android原生WebView默认不带内部链接拦截处理,点击页面链接时会把跳转请求抛给系统,直接唤起默认浏览器加载,自然会跳出当前应用。

修复方法

给WebView设置自定义WebViewClient,重写shouldOverrideUrlLoading方法拦截所有跳转,强制URL在当前WebView内加载即可。

  • 首先在文件头部导入缺失的WebViewClient类
  • 给WebView实例添加setWebViewClient配置,拦截跳转请求
  • 可选补充返回键逻辑,支持按返回键回退WebView历史页面,而不是直接退出应用
修改后完整可运行代码
package com.example.appthree;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String Htmlurl = "https://www.egkhindi.com/";
        webView = findViewById(R.id.webView);
        // 基础JS支持
        webView.getSettings().setJavaScriptEnabled(true);
        // 开启DOM存储适配,多数现代网站依赖该配置,否则可能出现白屏、功能异常
        webView.getSettings().setDomStorageEnabled(true);
        
        // 核心拦截配置:所有链接强制在当前WebView加载
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        webView.loadUrl(Htmlurl);
    }

    // 物理返回键适配:支持回退上一个网页,而非直接退出应用
    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}
补充说明

如果需要做域名白名单限制,仅允许站内链接在应用内加载,外部链接仍然跳转系统浏览器,可以在shouldOverrideUrlLoading方法中判断URL的host字段,匹配目标站点域名时执行内部加载返回true,非目标域名直接返回false交给系统处理即可。如果页面需要弹窗、上传文件等交互,额外配置WebChromeClient实现对应能力即可,不影响基础跳转逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:18:26