IE 11、XMLHttpRequest、xhr.upload 未在 Webworker 中设置

Posted

技术标签:

【中文标题】IE 11、XMLHttpRequest、xhr.upload 未在 Webworker 中设置【英文标题】:IE 11, XMLHttpRequest, xhr.upload no set in a Webworker 【发布时间】:2015-12-02 19:43:37 【问题描述】:

尝试在 JavaScrupt 中编写上传库时,我在 IE 11 上遇到了一个奇怪的问题。

使用 XMLHttpRequest 2,您可以上传文件并获取进度。但是,如果您尝试在 webworker 中这样做,您将不会从 IE 11 中获得任何进展(我只尝试了这个版本)。使用相同的代码会出错。

这里是一个例子:

worker.js

self.addEventListener("message", function(e) 

    var file = e.data;

    var xhr = new XMLHttpRequest();
    if (xhr.upload)
       xhr.upload.onprogress = function(event)
          // here we get the progression through event.loaded
    ;

    xhr.open('POST', '/upload.php', true);
    xhr.send(file);

);

main.js

var uploadworker = new Worker('worker.js');
uploadworker.postMessage( file );

如果您直接使用此代码,它将适用于任何浏览器。如果你在 webworker 中使用它,它在 IE11 中将不起作用。如果事实上你会在行上得到一个“无效参数”:if (xhr.upload) 因为在 webworker 中使用 XMLHttpRequest 时,IE11 似乎没有设置这个属性。

有人知道为什么会这样吗?

【问题讨论】:

您使用的正是这段代码吗?当您在 webworker 中使用 xhr 时,会不会是在错误的范围内声明了它?你能显示完整的(er)代码,包括 webworker 吗? 是的 GolezTrol,它是准确的代码。我用我的实现的所有细节更新了我的帖子。 【参考方案1】:

有人知道为什么会这样吗?

那是因为它是 bug,在此期间已修复。

【讨论】:

我使用的是 IE11,遇到同样的问题,有什么帮助吗? @Jerry 如提供的链接中所述,它已在 Edge 15.15002 中修复。 我正在使用 11.0.9600.19035 ,我仍然面临这个问题

以上是关于IE 11、XMLHttpRequest、xhr.upload 未在 Webworker 中设置的主要内容,如果未能解决你的问题,请参考以下文章

XHR——XMLHttpRequest对象

兼容ie7到ie11,chrome,firefox的ajax代码

XHR

21.1 XMLHttpRequest 对象JavaScript高级程序设计第三版

js——XHR知识归纳

学习Ajax