jquery - Phonegap AJAX 不适用于 iOS 和 Android
问题描述
我们是一家使用 phonegap 进行早期构建的小公司,但我们遇到了 404 ERROR / CORS。
我正在为我的 API 使用 .Net Framework - 并且 CORS 已完全设置。
所以基本上,当我通过 phonegap 开发工具在我的桌面上启动我的应用程序时,它可以工作,但如果我禁用我的“CORS”扩展它就不会。
但是当我为 IOS 和 Android 构建我的应用程序时,安装过程等正在创造奇迹,但我的问题是我无法让我的应用程序访问 API - 它没有命中 AJAX 调用。
如果我是正确的,我认为手机上不需要 CORS。
注意:我的 API 当前在 HTTP 而不是 HTTPS 上运行。
CSP:(允许一切,但仍然不起作用)
"meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; 媒体源*;连接源 *" /"
CONFIG.XML:(我删除了图标、名称和应用程序描述。)
<content src="index.html" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="14" />
<plugin name="cordova-plugin-battery-status" source="npm" spec="~1.1.1" />
<plugin name="cordova-plugin-camera" source="npm" spec="~2.1.1" />
<plugin name="cordova-plugin-media-capture" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-console" source="npm" spec="~1.0.2" />
<plugin name="cordova-plugin-contacts" source="npm" spec="~2.0.1" />
<plugin name="cordova-plugin-device" source="npm" spec="~1.1.1" />
<plugin name="cordova-plugin-device-motion" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-device-orientation" source="npm" spec="~1.0.2" />
<plugin name="cordova-plugin-dialogs" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-file" source="npm" spec="~4.1.1" />
<plugin name="cordova-plugin-file-transfer" source="npm" spec="~1.5.0" />
<plugin name="cordova-plugin-geolocation" source="npm" spec="~2.1.0" />
<plugin name="cordova-plugin-globalization" source="npm" spec="~1.0.3" />
<plugin name="cordova-plugin-inappbrowser" source="npm" spec="~1.3.0" />
<plugin name="cordova-plugin-media" source="npm" spec="~2.2.0" />
<plugin name="cordova-plugin-network-information" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-splashscreen" source="npm" spec="~3.2.1" />
<plugin name="cordova-plugin-statusbar" source="npm" spec="~2.1.2" />
<plugin name="cordova-plugin-vibration" source="npm" spec="~2.1.0" />
<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.2.1" />
</platform>
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
AJAX 调用:
function Login() {
var Email = $("#pass").val();
var Password = $("#bruger").val();
$.ajax({
type: 'GET',
url: 'http://myapiserver.com/' + Email + '/' + Password,
success: function (data) {
if (data.ID > 0 && data.Username !== null) {
console.log("", data.Id);
console.log("", data.Username);
window.localStorage.setItem("user", data.Id);
window.localStorage.setItem("namefield", data.Username);
window.location.assign("main.html");
} else {
$("#msg").html("<span style=\"color: black;\" class=\"alert\">Brugeren blev ikke fundet!</span>");
}
}
});
if (window.localStorage.getItem("user")!== null) {
window.location.assign("main.html");
}
}
我一直在阅读有关导致错误的 WebView 的内容,但是由于 IOS 也失败了,我认为这不是原因,它也应该在最新的 WebView 补丁中解决。
我可能需要更新一些 SDK 或其他东西,但由于我使用 Phonegap 工具创建应用程序,所以我不知道该怎么做。(可能需要一些帮助)
整个应用程序都在浏览器中运行,并且在 IOS 和 Andoid 上运行时“完成”——但我真的需要尽快解决这个问题,因为我们将在一周内召开投资者会议。
我真的希望有人知道这里发生了什么 - 在此先感谢!
解决方案
您绝对必须在 myapiserver.com 上实现 HTTPS,即使是为了开发。iPhone 通过 PhoneGap API 尤其会在外部 URL 不通过 HTTPS 时阻止请求。我构建了一个 PhoneGap 应用程序来解决这个问题。您可以尝试将其添加到允许的 URL,但 Apple 只会在它不使用 HTTPS 且没有真正错误原因的情况下阻止它。您需要将 SSL 添加到该 Web 服务的开发和生产服务器 URL。我假设Android已经跟随套件。
推荐阅读
- ldap - LDAP - ldapwhoami 返回“ldap_bind:无效凭据 (49)”
- node.js - Stripe:如何列出待处理的 webhook?
- python - 在 json-rpc 调用中从帖子中打印状态代码
- http-status-code-404 - 未找到云高仪 HTTP 404
- android - 如何让我的 react-native android 应用出现在另一个 android 应用的共享列表中
- java - Symantec CA 不信任对代码签名证书有何影响?
- matlab - 将矩阵逐行转换为列向量
- php - Drupal 菜单子项中缺少节点标题
- postgresql - POSTGRESQL PG/PGSQL- 带参数的函数
- data-structures - 找出一个节点是否是二叉树中另一个节点的祖先