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

Android WebView中超链接点击报错ERR_FILE_NOT_FOUND的解决方法

修复WebView点击外部链接出现ERR_FILE_NOT_FOUND的问题

这个问题我之前也踩过坑!本质是WebView加载本地HTML文件时,默认会把所有链接都当成本地相对路径处理——哪怕你写了完整的HTTPS地址,它也会傻乎乎地去本地文件系统里找对应文件,自然就报ERR_FILE_NOT_FOUND了。下面给你分步解决:

1. 先补全基础权限

首先确保你的AndroidManifest.xml里加了网络权限,毕竟要访问外部链接:

<uses-permission android:name="android.permission.INTERNET" />

2. 配置WebView核心设置

你需要给WebView开启必要的权限,并设置自定义的链接处理器,让它能区分本地和远程链接:

WebView webView = findViewById(R.id.your_webview_id);
WebSettings webSettings = webView.getSettings();

// 启用JavaScript(不是必须,但多数Web场景需要,建议开启)
webSettings.setJavaScriptEnabled(true);
// 允许混合内容加载(本地file://和远程https://属于混合内容,默认会被拦截)
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

// 关键:设置自定义WebViewClient拦截链接跳转
webView.setWebViewClient(new WebViewClient() {
    // 处理API 24+的链接跳转
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String targetUrl = request.getUrl().toString();
        // 判断是否是外部HTTP/HTTPS链接
        if (targetUrl.startsWith("http://") || targetUrl.startsWith("https://")) {
            // 方案一:用系统浏览器打开外部链接(推荐,避免WebView的兼容性问题)
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(targetUrl));
            startActivity(browserIntent);
            return true; // 告诉WebView:这个链接我已经处理了,不用你管
        } else {
            // 本地链接,交给WebView正常加载
            return super.shouldOverrideUrlLoading(view, request);
        }
    }

    // 兼容API 24以下的旧版本(可选,但建议加上覆盖全版本)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("http://") || url.startsWith("https://")) {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(browserIntent);
            return true;
        } else {
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
});

// 加载你的本地HTML文件
webView.loadUrl("file:///android_res/drawable/terms.html");

3. 额外检查:HTML链接格式

确认你的terms.html里的链接是标准写法,没有语法错误:

<a href="https://secfirst.org/terms">here.</a>

如果是在Java代码里拼接HTML字符串,记得转义引号(比如用\"),不过你是加载本地文件,只要文件内的链接正确就好。

这样处理后,点击"here."时,WebView会识别出这是外部HTTPS链接,要么调用系统浏览器打开,你也可以修改代码让WebView内部加载(把Intent那段换成view.loadUrl(targetUrl)再return true),就不会再出现本地文件找不到的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:06:06