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

Android WebView使用loadData加载本地HTML无法发送XHR请求如何解决?

问题原因
  • 你用loadData加载Base64编码的HTML时,WebView会将当前页面的源识别为data://格式的空源,没有对应可信域名。即使服务端配置了CORS规则,WebView也会默认拦截该空源发出的所有跨站请求,这是你遇到问题的核心原因。
可行解决方案

方案1(优先推荐):改用loadDataWithBaseURL加载HTML

这个方法可以手动指定当前页面的所属源,和你将页面部署到服务端加载的源完全一致,不需要额外开跨域权限,安全性更高。
对应代码示例:

String fullHtml = "你的完整index.html代码字符串";
// 第二个参数填写你要请求的PHP接口所在的服务端根地址即可
myWebView.loadDataWithBaseURL("https://你的服务端域名.com/", fullHtml, "text/html", "UTF-8", null);

使用该方法不需要再将HTML转Base64编码,直接传入原始HTML字符串即可。

方案2:开启WebView跨域访问权限

如果你坚持要使用loadData加载Base64编码的HTML,可以额外添加WebSettings配置,放开跨域访问限制:

webSettings.setJavaScriptEnabled(true);
// 新增以下配置
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowContentAccess(true);

注意:该方案会放开WebView的全局跨域限制,如果你的HTML中包含不可信的第三方代码,会存在安全风险。

额外排查项
  • 如果你的PHP接口使用HTTP明文协议,Android 9及以上系统默认会拦截明文请求,需要在AndroidManifest.xml的application标签中添加android:usesCleartextTraffic="true"配置。
  • 确认服务端PHP接口的CORS配置中,已经允许你指定的源(对应方案1的baseURL域名)的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:39:03