欢迎您提供建议或推荐的解决方案。科尔多瓦XmlHttp请求IP地址被阻止
我有一个使用RESTful服务的Cordova应用程序。应用程序需要在运行时指定的IP地址向打印机发送请求。该打印机是启用了WebPRNT的Star Micronics热敏打印机(它具有可接受打印作业的POST请求的Web服务器)。
在Chrome中运行时打印和RESTful服务工作。当我在iPad上部署它时,它会失败。我可以在iPad上的Safari中打开应用程序并成功发送打印作业。出于某种原因,Cordova似乎阻止了打印机的POST。 RESTful服务是使用域名的外部服务(CORS)。打印机正在使用IP。两者都使用POST方法。只有打印机出现故障。
我正在使用RestAngular进行应用程序和RESTful服务之间的通信。我正在使用Star Micronics' SDK(JavaScript使用裸XmlHttpRequest)将请求发送到打印机。我尝试使用RestAngular,Angular的$ http和JQuery向服务器发送请求。没有工作。
错误responseText为空,http代码为-1。该请求在出口处被阻止,并且从未将其发送到打印机。
科尔多瓦版本:5.3.3 应用:HTML5 + AngualrJS 1.4.3(此调用使用原始的XmlHttpRequest)
科尔多瓦配置(config.xml文件):
<plugin name="cordova-plugin-whitelist" version="1" />
<access origin="*" />
<access origin="content:///*" />
<allow-intent href="*" />
<allow-navigation href="*" />
我试过几个上述变化,指定IP明示等等。没有任何工作。
HTML元内容安全策略:
<meta http-equiv="Content-Security-Policy" content="connect-src * http://IP_HERE; ">
我已经试过内容安全策略的几种变化连同config.xml中的设置。没有工作。
打印机回答这些头时,我从浏览器发送:
Access-Control-Allow-Credentials → true
Access-Control-Allow-Headers → origin, content-type
Access-Control-Allow-Methods → POST, GET, OPTIONS
Access-Control-Allow-Origin → *
这里是发出调用(裁剪StarWebPrintTrader.js)的代码。完整的JS文件包含在Star Micronics' SDK:
var c=null;
if(window.XMLHttpRequest)
c=new XMLHttpRequest;
else if(window.ActiveXObject)
c=new ActiveXObject("Microsoft.XMLHTTP");
else{
if(this.onError)
this.onError({status:10001,responseText:"XMLHttpRequest is not supported."});
return
}
try{
c.open("POST",b,!0)
}
catch(f){
if(this.onError)
this.onError({status:10002,responseText:f.message});
return
}
c.setRequestHeader("Content-Type","application/xml; charset=UTF-8");
c.onreadystatechange=function(){alert('state change')};
c.send();
你使用的是iOS 9吗? –
是的。我正在使用iOS 9. – Rusty
好的,请参阅我的答案,您将面对App Transport Security配置。 –