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
相关产品推荐
相关产品推荐

