Phonegap跨域Ajax请求仅在debuggable = false时在Android上失败,而在debuggable = true时失败

我有一个PhoneGap应用程序,该应用程序在iOS上运行良好,但是在为发布版本进行设置时,无法在Android上运行.

我正在使用Phonegap CLI创建应用程序.

$phonegap --version
4.2.0-0.24.2

设置了用于网络访问和白名单的config.xml选项:

<access origin="*" />
<feature name="http://api.phonegap.com/1.0/network" />

我已验证我的AndroidManifest.xml正在请求互联网权限:

<uses-permission android:name="android.permission.INTERNET" />

我的API返回适当的ACCESS-CONTROL-ALLOW-ORIGIN标头值:

Access-Control-Allow-Origin: *

为了很好,我也将其添加到了JS中:

$.support.cors = true;

如果我设置android远程调试属性,以便可以从chrome:// inspect连接,则网络请求成功,一切正常:

<application android:debuggable="true" ... >

但是,如果我只是删除了android:debuggable =“ true”以便可以提交到Play商店,重新编译并再次测试,则我的跨域Ajax请求将失败.当它们失败时,它们将返回jqXHR.status = 0和jqXHR.readyState = 0,根据我的经验,这表明飞行前OPTIONS请求由于某种原因而失败.

不幸的是,当我启用调试并连接以查看网络请求时,所有内容都可以正常工作-因此我看不到有什么问题.我已经恢复到alert()-进行了各种尝试来找出正在发生的事情……但是我没有得到更多.

我也可以在笔记本电脑的浏览器中使用file:// url(在Android应用程序中是打开的方式)运行应用程序,也可以通过a local webserver(在localhost:3030)运行它,在两种情况下-域请求可以正常工作.

我不知道该怎么办.我还可以提醒其他有关该错误的信息吗? (也许是导致此问题的其他标头?)

解决方法:

我相信我已经找到了问题:Android不喜欢我的中间SSL证书之一.这与我注意到的行为一致:

>在iOS上运作良好
>在笔记本电脑上的Chrome中正常运行(文件://和本地主机)
>使用http://时工作正常
>使用https://时出现明显的CORS飞行前请求失败(statusCode = 0,status = 0)

现在,我将使用对我的api的非SSL访问权限,这样我就可以继续前进了,我将让服务器管理员知道SSL存在问题–可能是Android不信任的中间证书.

上一篇:android-在cordova iOS上检查磁盘空间


下一篇:Phonegap使Android应用程序显示黑屏