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

Android开发中WebView加载在线HTML点击链接跳转浏览器如何解决

Android WebView内部加载链接解决方案

核心原因

WebView默认未配置自定义WebViewClient时,页面内的跳转请求会被系统以Intent形式分发,优先使用系统浏览器打开,只需添加WebViewClient配置即可解决。

必须修改的代码项

  • 给WebView设置自定义WebViewClient实例,重写shouldOverrideUrlLoading方法接管页面跳转逻辑
  • 修正加载地址的协议头,在线地址必须加http://或https://前缀,否则会加载失败
  • 可选优化:重写Activity的返回逻辑,支持WebView页面栈回退
  • 必须在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />

修改后完整代码

public class ContainerActivity extends Activity {    
    private WebView mWebView;    
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.contain);        
        mWebView = (WebView)findViewById(R.id.wvPortal);        
        WebSettings mWebSettings = mWebView.getSettings();        
        mWebSettings.setJavaScriptEnabled(true);
        // 核心配置:设置WebViewClient接管跳转逻辑
        mWebView.setWebViewClient(new WebViewClient() {
            // 兼容Android 7.0以下版本
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            // 兼容Android 7.0及以上版本
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(request.getUrl().toString());
                return true;
            }
        });
        // 注意地址补全http/https协议头
        mWebView.loadUrl("https://www.domain.com/path/to/index.html");
    }

    // 可选优化:按返回键先退回WebView上一页,没有历史再退出页面
    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
            return;
        }
        super.onBackPressed();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:24:01