歡迎您提供建議或推薦的解決方案。科爾多瓦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配置。 –