读取在具有IE的工作程序中生成的对象URL

reading an object URL produced in a worker with IE

本文关键字:对象 URL 工作程序 IE 读取      更新时间:2023-09-26

我有一个webworker,它正在生成用于下载的CSV,为了节省内存,我只让它返回它从blob生成的URL。。我的工作者代码看起来像::

var blob = new Blob([ResultOfSomeWork()],{type:'text/csv'});
URL.createObjectURL(blob);
self.postMessage({url:blob.url});

我的目标是能够在firefox和chrome中下载它,这非常容易,因为我可以设置一个不可见的<a>,然后点击它下载

对于IE10,我想使用msSaveBlob,但我需要一个我不想传输的blob。如何在IE10中下载对象数据URL?

所以我找到了一个有效的解决方案。显然,我可以XHR并在我的主线程中读回内容。

worker.onmessage = function(event){
    var url = event.data.url;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType='blob';
    xhr.onload = function(){
       msSaveBlob(xhr.response, fileName +'.csv');
    };
    xhr.send();
}

虽然这感觉非常复杂,但在实践中效果很好,速度也很快。