コマンドの受け入れに使用される TXAS XML API Web サービスを持つサードパーティのロボットデバイスの制御に使用される HTML5 webapp に取り組んでいます。サードパーティ 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 で clean を実行します。ただし、同じ方法で起動すると、chrome、firefox、または IE では機能しません (エラー イベントをトリガーします)。
これを使用するデバイスのほとんどが iPhone/iPad であるため、これは大したことではないと思いましたが、ページをデバイスにロードする私の方法は、HTTP 経由でローカルに保存することです。この方法で行うと、サファリでも失敗します。diff-merge プログラムを使用して、HTTP で読み込まれたコードとローカルにソースされたコードが同一であることを確認しましたが、何らかの理由で HTTP で読み込まれたコードが実行されません (エラー イベントがトリガーされます)。
ここで SOP の制限に達していますか? これを回避する方法を探しましたが、それらはすべて、展開シナリオのオプションではない外部サーバーまたはプロキシを必要とするようです。
また、デバイスから何かが返されることを期待していないことにも注意する必要があります。また、XML を Web サービスに POST する以外に、デバイスとやり取りする必要もありません。
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