google-chrome中的XMLHttpRequest不报告进度事件

Ovi*_*Ovi 16 javascript security google-chrome xmlhttprequest updateprogress

大家好我有这个代码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我的服务器响应了对于upload.aspx的初始OPTIONS请求200和Access-Control-Allow-Origin:*然后第二个请求POST发生

一切似乎都已到位,它在FireFox上运行良好,但在G Chrome上,updateProgress处理程序不会被调用但只调用一次,然后lengthComputable为false.

我需要Access-Control-Allow-Origin:*因为这是一个跨域调用,脚本父级是不同服务器上的资源,然后是upload.aspx域

任何人都可以给我一些线索,提示,请帮忙吗?这是G Chrome的一个已知问题吗?

谢谢!OVA

eri*_*old 0

首先,确保将其"www.example.com"添加到 中manifest.json,如下所示:

清单.json

 {
   ..
   "permissions": [
     "http://www.example.com/",
     "https://www.example.com/",
   ],
   ..
 }
Run Code Online (Sandbox Code Playgroud)

那么我认为你的例子应该有效。

有关在 google chrome 扩展中使用 xhr 的更多信息,请参阅此处的文档

如果我上面提供的内容不值得一看,那么CSP 文档也值得一看。