2015-03-30 62 views
0

我有一个webworker产生一个CSV下载,并保存内存我只有它返回它产生的URL blob .. 我的工人代码看起来像::阅读工人与IE浏览器产生的对象URL

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

我的目标是只可以下载它在Firefox和Chrome,这是因为我可以只设立一个无形<a>并将它被点击下载很容易。

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

+0

ResultOfSomeWork()产生了哪些类型的数据?如果它是一个ArrayBuffer,你可以通过'postMessage'来传递它,而不会被复制。 – levi 2015-03-30 20:41:12

+0

这是一个'字符串'。这只是一个很大的csv。 – 2015-03-30 22:15:23

回答

1

所以我找到了一个可行的解决方案。显然,我可以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(); 
} 

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