cordova 11跨域问题

oxcyiej7  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(377)

我已经在谷歌搜索了几天来解决我的问题。但没有什么可以解决我的问题。我想建立只是简单的移动的应用程序与** cordova 最新版本( cordova 版本11.0.0)。该问题是关于croos域从外部域获取数据。
index.html**文件中,我已经将以下代码:

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

对于index.html上的jquery请求,我已经编写了以下内容:

<script src="scripts/jquery.mobile-1.4.5.min.js"></script>
<script src="scripts/jquery-3.6.0.min.js"></script>
<script>
$(document ).bind( "mobileinit", function() {
        $.mobile.allowCrossDomainPages = true;
        $.support.cors = true;
    });
</script>

<script src="scripts/bootstrap.min.js"></script>
<script>
    function ambilCoba()
    {
        var loginString ="view=all";
        
        $.ajax({
                type: "GET",
                dataType:"json",
                crossDomain: true,
                cache: false,
                url: 'https://app.example.com/test.php',
                data: loginString,
                success: function(json){
                    $('#kotbah').html(json['output'][3]);
                }
            });
          }

</script>

正如我在SO上读到的,jquerymobile的位置一定是正确的。我试过用很多位置来放置它,但仍然没有运气。
config.xml文件中,我已经放置了以下内容:

<access origin="*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <allow-navigation href="https://*/*" />
    <allow-navigation href="http://*/*" />

在我想获取数据的外部域(test.php)中,我已经输入了以下代码:

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token , Authorization');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
header('Access-Control-Max-Age: 1000');   
header('Content-Length: 0');
header('Content-Type: text/plain');
header('Content-Type: application/json');

$p=array(1,2,3,4);
return json_encode($p);
?>

在 cordova 的index.html,它应该打印的结果是4。它在本地浏览器中工作。但当我试图在Android模拟器运行,它什么都没有显示。试图建立APK文件,并安装在移动的上,也没有结果。
我还尝试使用SO中建议的XMLHttpRequest。代码如下:

var xhr = new XMLHttpRequest();
        
                    xhr.onreadystatechange = function() {
                        if (this.readyState == 4 && this.status == 200){
                            var container = document.getElementById('kotbah');
                            container.innerHTML = xhr.responseText;
                        }
                        else
                            {
                                alert(this.status); 
                                alert(this.statusText);
                alert(this.responseText);
                            }
                    }  
        
                    xhr.open('GET', 'https://app.example.com/APP/test.php', true);                  
                    xhr.send(null);

我设置了状态警报,以查看Android中到底发生了什么。在Android模拟器中,状态警报是404,表示未找到页面。但URL确实存在。
我已经试了几天了,但是还是没有成功。2年前,我用的是不同版本的 cordova ,上面的配置没有显示任何问题。我还读到我需要使用白名单插件。我试过这样做,但是在github上,它说白名单插件在 cordova 版本6和更高版本中不再需要。
从外部域获取PHP数据的所有代码中,我缺少了什么?请帮助。谢谢。

1bqhqjot

1bqhqjot1#

你有两个选择。要么设置相同的域作为你的API使用主机方案。

<preference name="scheme" value="app"/>
 <preference name="hostname" value="localhost"/>

或者使用for Android绕过安全保护

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

适用于iOS

<plugin name="@globules-io/cordova-plugin-ios-xhr">
 <preference name="InterceptRemoteRequests" value="all" />

相关问题