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

Cordova 10适配Android SDK 30无法访问本地文件问题求助

解决方案

核心问题确认

你的判断正确,Android 11(SDK 30)起系统WebView的setAllowFileAccess默认值改为false,Cordova Android 10+同步适配了这个默认策略,且未在官方文档中高亮对应的配置项。

可落地修复步骤

  • 第一步:添加Cordova原生支持的WebView权限配置
    在你config.xml的<platform name="android">节点内新增2个偏好设置:
<preference name="AllowFileAccess" value="true" />
<preference name="AllowUniversalAccessFromFileURLs" value="true" />

前者直接对应WebView的setAllowFileAccess开关,后者解决不同本地文件路径之间的跨域访问限制。

  • 第二步:升级适配SDK30的基础插件
    你当前使用的cordova-plugin-file@6.0.0未适配Android分区存储规则,会返回不符合WebView安全限制的本地路径,建议升级到7.0及以上版本:
cordova plugin rm cordova-plugin-file
cordova plugin add cordova-plugin-file@7.0.0
  • 第三步:(可选)强制修改WebView配置
    如果上述两步修复无效,可以创建一个仅10行代码的本地Cordova插件,在WebView初始化时强制开启文件访问权限:
    Android端Java逻辑:
package com.custom.webviewsetting;

import android.webkit.WebSettings;
import android.webkit.WebView;
import org.apache.cordova.CordovaPlugin;

public class WebViewSetting extends CordovaPlugin {
    @Override
    protected void pluginInitialize() {
        WebView webView = (WebView) webView.getEngine().getView();
        WebSettings settings = webView.getSettings();
        settings.setAllowFileAccess(true);
        settings.setAllowFileAccessFromFileURLs(true);
        settings.setAllowUniversalAccessFromFileURLs(true);
    }
}

额外优化建议

  • 你当前config.xml中重复引入了两次cordova-plugin-wkwebview-engine,该插件仅对iOS生效,不影响Android逻辑,建议删除重复声明避免打包冲突。
  • 如果你加载的是应用自身沙盒目录(/storage/emulated/0/Android/data/你的包名/路径下)的文件,无需申请MANAGE_EXTERNAL_STORAGE、读写外部存储权限,开启文件访问开关即可正常加载。
  • 如果你需要加载公共目录下的本地文件,建议将file://路径替换为系统提供的content://URI,完全规避WebView的本地文件访问限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:54:03