我正在开发一个HTML5 webapp,用于控制第三方机器人设备,该设备具有用于接受命令的TXAS XML API Web服务。我无权更改第三方API,这是非常基本的。它有一个带有基本授权的结构化XML命令格式,它不了解JSON或JSONP,只是直接的XML。
我正在尝试尽可能优雅地编写它并让应用程序完全自包含在文件中以加载到控制设备(平板电脑/智能手机)上,而不需要在加载后与远程服务器进行任何交互。即这将是平板电脑与其控制的设备之间的p2p应用程序。
我想我立即遇到了S.O.P.导致问题的限制,但我不知道如何绕过它,因为代码是平板电脑的本地代码而我控制的设备不是。
这是我正在尝试执行的代码:
function postXML(strIN){
$.ajax({
type: "POST",
url: "http://1.1.1.1/putxml",
contentType: "text/xml",
datatype: "xml",
data: strIN,
processData: false,
beforeSend: function (xhr){ xhr.setRequestHeader("Authorization","Basic " + btoa("user:pass")); },
error: function(request, error) { alert("error:" + error);}
});
}
$("#preset1").click(function(){
var str = '<Command><Preset><Activate><PresetId>1</PresetId></Activate></Preset></Command>';
postXML(str);
});
从本地驱动器启动时,代码在safari中执行干净;但是,当以相同方式启动时,它将无法与chrome,firefox或IE一起使用(触发错误事件)。
由于大多数将要使用它的设备是iPhones / ipads,我认为这不是什么大问题,但是,我将页面加载到设备上的方法是通过HTTP然后在本地保存。当以这种方式完成时,它也在safari上失败。我使用了差异合并程序来验证HTTP加载的代码和本地源代码是否相同,但是由于某种原因,HTTP加载的代码将不会执行(触发错误事件)。
我是否打过S.O.P.限制在这里?我已经找到了解决此问题的可能方法,但它们似乎都需要一个外部服务器或代理,这不是我的部署方案的选项。
我还应该注意到,除了将XML发布到它的web服务之外,我不希望从设备返回任何内容,也不需要与它进行任何其他交互。
Chrome的一些其他调试数据:
Failed to load resource: Resource failed to load http://1.1.1.1/putxml
OPTIONS http://1.1.1.1/putxml Resource failed to load jquery-1.8.2.min.js:2
send jquery-1.8.2.min.js:2
p.extend.ajax jquery-1.8.2.min.js:2
postXML index-working.html:35
(anonymous function) index-working.html:53
p.event.dispatch jquery-1.8.2.min.js:2
g.handle.h jquery-1.8.2.min.js:2