1

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&param2=val2

これをブラウザにロードすると、単純で有効な JSON が返されます。

{
    "ret" : [

        { "date": 1380603600000, "foo": bar1 }, 
        { "date": 1380776400000, "foo": bar2 }
    ]
}

開発者コンソールでテストするために使用している機能は次のとおりです。

xhr('https://prefix.domain.suffix/sub/serve.aspx?param1=val1&param2=val2', function(e){ console.log(e); });

コンソールに出力されるのはすべてでerror:ありxhr、その時点では次のとおりです。

XMLHttpRequest {statusText: "", status: 0, response: "", responseType: "", responseXML: null…}

考慮する必要があるかもしれないもう 1 つのことは、私が要求しているこの URL が私のサーバーの認証の背後にあるということです。ログインしていて、使用しているタブに関係なくページにアクセスできるので、それは問題ではないと思いますが、それでも問題がある可能性があります.

4

2 に答える 2