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

Android WebView无法加载asset文件夹资源 iframe加载失败问题求解决方案

Android WebView iframe无法加载问题解决方案

错误原因

该报错由Android 7.0及以上版本内置的Chromium内核WebView的安全限制导致:所有非用户主动手势触发的Intent跳转(包括iframe加载资源时触发的隐式跳转)都会被系统默认拦截,自动加载的iframe属于无用户手势触发的请求,因此被拦截。
你之前添加的配置主要针对存储和多窗口支持,不涉及该安全限制的适配,因此无法解决问题。

可行解决方案

1. 补充WebView基础权限配置

开启文件访问和跨协议访问权限,适配本地asset资源的iframe加载场景,代码如下:

WebSettings settings = view.getSettings();
// 开启文件访问权限
settings.setAllowFileAccess(true);
settings.setAllowContentAccess(true);
// 允许file协议URL访问其他file协议资源
settings.setAllowFileAccessFromFileURLs(true);
settings.setAllowUniversalAccessFromFileURLs(true);
// 确认开启JavaScript权限,iframe加载依赖该配置
settings.setJavaScriptEnabled(true);

2. 重写WebViewClient拦截URL加载

拦截所有iframe的加载请求,直接交由当前WebView加载,避免触发系统Intent跳转逻辑:

view.setWebViewClient(new WebViewClient() {
    // 适配Android 7.0及以上版本
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        view.loadUrl(request.getUrl().toString());
        return true;
    }

    // 兼容Android 7.0以下版本
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
});

3. 补充网络适配配置

如果iframe加载的是外部HTTP明文链接,需要在AndroidManifest.xml的application节点添加明文流量权限:

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:54:03