2017-06-01 215 views
0

我试图使用uri(代码如下)下载png文件。它可以在Chrome,Firefox和Safari中运行 - 但在Internet Explorer中不能(当然)。我在Windows 7上,所以我在边缘文档模式下使用IE11。错误是“传递给系统调用的数据区域太小”。我读过的this MDN postInternet Explorer - 传递给系统调用的数据区太小 - 使用uri下载png

IE9及更高版本,以及封边,支持在CSS数据URI和JS 文件,而不是在HTML文件中,与4GB的最大尺寸。

我的URI只有1410字节(使用uri.length)。任何想法,为什么我得到这个大小的数据错误,以及如何解决它?

下载功能:

function downloadURI(uri, name) { 
    var link = document.createElement("a"); 
    link.download = name; 
    link.href = uri; 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 
    delete link; 
} 

的URI格式:

"data:image/png;base64,iVBORw0KGgo ETC..." 
+0

'delete link;' - > ['delete operator'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete):_“任何用var声明的属性不能从全局范围或功能范围中删除。“_ – Andreas

+0

https://stackoverflow.com/questions/20844644/why-am-i-getting-this-error-in-ie – Andreas

+0

@Andreas - 我试过了= >'if(navigator.msSaveBlob){\t return navigator.msSaveBlob(new Blob([uri],{type:“image/png”}),name);}' 它下载得很好,但文件无法读取作为PNG。建议? – mseifert

回答

2

的解决方案如下。我似乎无法找到提供信用的链接,但这解决了它。不是先将画布转换为uri,而是将画布转换为uri并使用链接下载或(对于IE)我将其转换为blob并使用canavas.msToBlob()和msSaveBlob()

function downloadURI(canvas, name) { 
    if (navigator.msSaveBlob) { // IE10+ 
    var blob = canvas.msToBlob(); 
    return navigator.msSaveBlob(blob, name); 
    } else { 
    var uri = canvas.toDataURL("image/png") 
    var link = document.createElement("a"); 
    link.download = name; 
    link.href = uri; 
    document.body.appendChild(link); 
    if (link.click) { 
     link.click(); 
    } else { 
     var event = document.createEvent('MouseEvents'); 
     event.initMouseEvent('click', true, true, window); 
     link.dispatchEvent(event); 
    } 
    document.body.removeChild(link); 
    } 
} 
相关问题