17

こんにちは、私はこのコードを持っています:

function test()
{
    req = new XMLHttpRequest();
    req.upload.addEventListener("progress", updateProgress, false);
    req.addEventListener("readystatechange", updateProgress, false);
    req.addEventListener("error", uploadFailed, false);
    req.addEventListener("abort", uploadCanceled, false);

    var data = generateRandomData(currentPayloadId);
    totalSize = data.length;

    req.open("POST", "www.mydomain.com/upload.aspx");
    start = (new Date()).getTime();
    req.send(data);
}

function updateProgress(evt)
{
    if (evt.lengthComputable) {
        total = totalSize = evt.total;
        loaded = evt.loaded;
    }
    else {
        total = loaded = totalSize;
    }
}

また、私のサーバーは、upload.aspx の最初の OPTIONS 要求に 200 と Access-Control-Allow-Origin: * で応答し、2 番目の要求 POST が発生します。

すべてが整っているようで、FireFox では問題なく動作していますが、G Chrome では updateProgress ハンドラが呼び出されず、1 回だけ呼び出され、その後 lengthComputable が false になります。

Access-Control-Allow-Origin が必要でした: * これはドメイン間の呼び出しであるため、スクリプトの親は、upload.aspx ドメインとは別のサーバー上のリソースです。

誰でも手がかり、ヒント、助けてください。これは G Chrome の既知の問題ですか?

ありがとうございました!オバ

4

5 に答える 5

1

ロードしているページに含まれていないときに、この問題が発生しました

  Content-Length: 12345

ここで、12345 は応答の長さ (バイト単位) です。長さパラメーターがないと、progress 関数は何も処理しません。

于 2017-07-06T17:10:18.380 に答える
0

まず、次のように"www.example.com"が に追加されていることを確認しmanifest.jsonます。

マニフェスト.json

 {
   ..
   "permissions": [
     "http://www.example.com/",
     "https://www.example.com/",
   ],
   ..
 }

次に、あなたの例がうまくいくはずだと思います。

Google Chrome 拡張機能で xhr を使用する方法の詳細については、こちらのドキュメントを参照してください

また、私が上で提供したものがそうでない場合は、CSP ドキュメントも一見の価値があります。

于 2015-06-10T01:42:17.627 に答える