SOに関するこの他の質問「XMLHttpRequestがGoogle ChromeパッケージWebアプリで機能しない」と同様の問題があります。ただし、選択した回答は機能しません。マニフェストのアクセス許可にリストされている、要求しようとしている URL があります。Chrome のCross-Origin XMLHttpRequestおよびEmbed Contentドキュメントで読んだように、これはクロスサイト スクリプティングの防止に関係していると感じています。
応答を調べると、この SO の質問: Empty responseText from XMLHttpRequestに見られるように、XSS のようにドメイン間で要求を作成しようとした場合と同じように、すべてが空で、status
コードがなくresponse
、 no 、 noです。statusText
これが私のマニフェストです:
{
"manifest_version" : 2,
"name": "{name}",
"description" : "{description}",
"version" : "0.1",
"minimum_chrome_version": "23",
"permissions": [
"idle",
"storage",
"notifications",
"https://prefix.domain.suffix/*",
"https://prefix.domain.suffix/sub/"
],
"app": {
"background": {
"scripts": ["models.js", "background.js"]
}
},
"icons": { "16": "icon-16.png", "128": "icon-128.png" }
}
この関数を使用してリクエストを実行しています:
function xhr(url, callback){
var timeout= 2000;
var xhr = new window.XMLHttpRequest();
xhr.ontimeout = function () {
console.error("The request for " + url + " timed out.");
};
xhr.onerror = function(){
console.error("error: "+xhr.statusText);
}
xhr.onload = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
window.console.log("response: "+xhr.response);
callback(JSON.parse(xhr.response));
} else {
console.error(xhr.statusText);
}
}
};
xhr.open("GET", url, true);
xhr.timeout = timeout;
xhr.send(null);
}
私がリクエストしようとしている URL は、いくつかのクエリ文字列パラメーターが最後に追加された、かなり基本的なもので、次のようになります。
https://prefix.domain.suffix/sub/serve.aspx?param1=val1¶m2=val2
これをブラウザにロードすると、単純で有効な JSON が返されます。
{
"ret" : [
{ "date": 1380603600000, "foo": bar1 },
{ "date": 1380776400000, "foo": bar2 }
]
}
開発者コンソールでテストするために使用している機能は次のとおりです。
xhr('https://prefix.domain.suffix/sub/serve.aspx?param1=val1¶m2=val2', function(e){ console.log(e); });
コンソールに出力されるのはすべてでerror:
ありxhr
、その時点では次のとおりです。
XMLHttpRequest {statusText: "", status: 0, response: "", responseType: "", responseXML: null…}
考慮する必要があるかもしれないもう 1 つのことは、私が要求しているこの URL が私のサーバーの認証の背後にあるということです。ログインしていて、使用しているタブに関係なくページにアクセスできるので、それは問題ではないと思いますが、それでも問題がある可能性があります.