我已经在谷歌搜索了几天来解决我的问题。但没有什么可以解决我的问题。我想建立只是简单的移动的应用程序与** 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数据的所有代码中,我缺少了什么?请帮助。谢谢。
1条答案
按热度按时间1bqhqjot1#
你有两个选择。要么设置相同的域作为你的API使用主机方案。
或者使用for Android绕过安全保护
适用于iOS