我正在开发一个 HTML5 webapp,用于控制具有用于接受命令的 TXAS XML API Web 服务的第 3 方机器人设备。我无权更改第 3 方 API,而且它非常基础。它具有具有基本授权的结构化 XML 命令格式,它不理解 JSON 或 JSONP,只是直接的 XML。
我正在尝试尽可能优雅地编写此代码,并将应用程序完全独立地包含在要加载到控制设备(平板电脑/智能手机)上的文件中,而无需在加载后与远程服务器进行任何交互。即,这将是平板电脑和它所控制的设备之间的 p2p 应用程序。
我认为我立即遇到了导致问题的 SOP 限制,但我不确定如何解决它,因为代码是平板电脑本地的,而我控制的设备不是。
这是我要执行的代码:
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。
由于大多数将使用它的设备都是 iPhone/ipad,我认为这没什么大不了的,但是,我将页面加载到设备上的方法是通过 HTTP,然后在本地保存。当以这种方式完成时,它也会在 safari 上失败。我使用了一个 diff-merge 程序来验证 HTTP 加载的代码和本地源代码是否相同并且它们是相同的,但是由于某种原因,HTTP 加载的代码将不会执行(触发错误事件)。
我在这里达到了 SOP 限制吗?我已经寻找解决此问题的可能方法,但它们似乎都需要外部服务器或代理,这不是我的部署方案的选项。
我还应该注意,我不希望从设备返回任何东西,也不需要与它进行任何其他交互,除了将 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