Android项目创建本地Worker时持续出现CORS问题求助
解决Android WebView中本地Worker的CORS问题
排查方向与修复步骤
检查WebView跨域核心设置
Android 11及以上版本对WebView本地文件访问限制更严格,必须显式开启以下配置:WebSettings webSettings = webView.getSettings(); webSettings.setAllowUniversalAccessFromFileURLs(true); webSettings.setAllowFileAccess(true); webSettings.setAllowFileAccessFromFileURLs(true);其中
setAllowFileAccessFromFileURLs在Android 16+默认关闭,是本地文件加载Worker的关键开关。规范Worker文件的加载路径
直接使用file:///android_asset/前缀指向assets目录下的Worker文件,避免相对路径导致的解析问题:const worker = new Worker('file:///android_asset/worker.js');若Worker存放在其他目录,需确保路径符合Android文件URI规范,且WebView具备对应目录的访问权限。
拦截Worker请求绕开CORS检查(Android 12+)
Android 12及以上新增资源访问限制,可通过WebViewClient手动处理Worker文件请求:webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); if (url.endsWith("worker.js")) { try { InputStream inputStream = getAssets().open("worker.js"); return new WebResourceResponse("application/javascript", "UTF-8", inputStream); } catch (IOException e) { e.printStackTrace(); } } return super.shouldInterceptRequest(view, request); } });核对Manifest权限配置
针对Android 10及以下版本,需添加外部存储权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />Android 10+若需访问外部存储的Worker文件,可临时添加
android:requestLegacyExternalStorage="true"到application标签(仅兼容用,建议优先适配分区存储)。
额外排查点
- 对比之前成功项目的WebView版本、Worker文件位置、系统版本差异,定位是否为版本特有限制;
- 若使用Jetpack Compose WebView或第三方WebView库,确认库本身是否默认禁用本地文件跨域访问,需针对性开启对应配置。
内容的提问来源于stack exchange,提问作者Maksim
相关产品推荐
相关产品推荐

