Cordova Android应用程序上的 AJAX 请求失败

0pizxfdo  于 2022-11-15  发布在  Android
关注(0)|答案(1)|浏览(267)

当我在Chrome浏览器上运行该项目时, AJAX 请求工作正常,但当我在Android上安装该应用程序时,请求不再工作。

var xhr=new XMLHttpRequest()
            xhr.onerror=function(){
           
                var message=alert(txt('Please turn on mobile data or Wi-Fi','Ligue os dados moveis ou Wi-Fi'))
                
            }
            
            xhr.onreadystatechange=function (){
                if (this.status== 200 && this.readyState == 4){ 
                alert("trye")
                  eval(xhr.responseText)
                
                } 
            }
            xhr.open("POST",`http://dpreaction.ml?i=js`)
            xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded')
            xhr.send()

config.xml文件

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.teste.teste" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>DP Reaction</name>
    <description>Inrease your things</description>
    <author email="gilluisfrancisco70@gmail.com" href="http://dpreaction.ml">
        DP Reaction
    </author>
    <content src="index.html" />
    <allow-intent href="*" />
    <access origin="*" />
    <allow-naviation href="*" />
</widget>

这是我的标签:

<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' 'unsafe-eval'  data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
lkaoscv7

lkaoscv71#

根据https://github.com/apache/cordova-android/issues/1354
内容安全策略是与CORS(跨源资源共享)不同的安全机制。
在cordova-android@10中,他们实现了一个WebAssetLoader,它通过https://localhost协议代理请求。WebAssetLoader的作用就像一个只有您的应用才能访问的私有Web服务器。之所以这样做,是因为一些Web视图功能要求您处于“安全上下文”(例如HTTPS)中才能启用这些功能。这样做,它确实启用了CORS强制。
Cordova android 9.x使用的是普通的旧文件系统(file://),它没有强制执行CORs。这就是为什么XHR请求在9.x中可以工作,而在10.x中不能。你可以通过启用AndroidInsecureFileModeEnabled
因此,如果您使用的是cordova-android@10,只需在config.xml中添加以下首选项:

<preference name="AndroidInsecureFileModeEnabled" value="true" />

我也有同样的问题,它为我解决了。:)

相关问题