Windows Phone 8 でアプリをテストしているときに、奇妙な問題に遭遇しました。サード パーティの URL を呼び出すために、xmlHttpRequest (bufferarray として送信する必要があるため、ajax を使用できません) を使用しています。これは Android と iOS では完全に機能しますが、WP8 ではエラーがスローされます 例:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function (){
if(xhr.readyState == 4){
if(xhr.status==200){
alert(xhr.responseText);
}else{
console.log("Error: "+xhr.responseText);
}
}
}
console.log("1");
xhr.timeout = 30000;
console.log("2");
xhr.open("POST","http://google.com",true);
console.log("3");
xhr.setRequestHeader("Content-Type",contentType+"; boundary=" + boundary);
console.log("4");
//other headers / auth etc
console.log("about to post");
xhr.send(bodyBuf);
これにより、次のようになります。
log:"before request"
log:"1"
log:"2"
log:"Error in error callback: Cameraxxxxx = InvalidStateError"
ただし、オープンを次のように変更すると:
xhr.open("POST","google.com",true); //or www.google.com etc
これはそのまま送信されますが、URL が見つからないため 404 ステータスが返されます。私は明らかにリクエストでグーグルを使用していませんが、エラーは同じです。「http://」を指定するとエラーになりますが、指定しないとエラーにはなりませんが、URL が見つかりません。
どんな考えでも大歓迎です。
あることを見つけましたが、それが関連しているかどうかはわかりません。W3C html 5 ドキュメントによると、ドキュメントが完全にアクティブでない場合 (ブラウジング コンテキストのアクティブなドキュメントである場合)、open() で InvalidStateError がスローされます。そして、これがエラーの原因である場合; ドキュメントがアクティブなドキュメントにならない方法と、URL に存在しないアプリのベース URL を定義する方法 (ドキュメントは、ベースをドキュメントのドキュメント ベース URL に設定する (またはソースの起点/リファラー ソースを設定する) ことを提案しています)。
一歩近づいた。いろいろいじった後、何らかの理由で WP8 では、他のものを適用する前に xhr を開く必要があることが最終的にわかりました。したがって、 xhr.timeout を xhr.open の種類の下に移動すると機能します。
これは私の特定のケースで別の問題を引き起こします..しかし、それはおそらく別のトピックです。