Internet Explorer - 传递给系统调用的数据区域太小 - 使用 uri 下载 png
Internet Explorer - The data area passed to a system call is too small - Downloading png with the uri
我正在尝试使用 uri(下面的代码)下载一个 png 文件。它适用于 Chrome、Firefox 和 Safari - 但(当然)不适用于 Internet Explorer。我在 Windows 7,所以我在边缘文档模式下使用 IE11。错误是 "The data area passed to a system call is too small." 我读过 this MDN post
IE9 and later, as well as Edge, supports data URIs in CSS and JS
files, but not in HTML files, with a max size of 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..."
解决方法如下。我似乎无法找到 link 来给予信任,但这解决了它。我没有先将 canvas 转换为 uri,而是传递 canvas 并转换为 uri 并使用 link 下载,或者(对于 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);
}
}
我正在尝试使用 uri(下面的代码)下载一个 png 文件。它适用于 Chrome、Firefox 和 Safari - 但(当然)不适用于 Internet Explorer。我在 Windows 7,所以我在边缘文档模式下使用 IE11。错误是 "The data area passed to a system call is too small." 我读过 this MDN post
IE9 and later, as well as Edge, supports data URIs in CSS and JS files, but not in HTML files, with a max size of 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..."
解决方法如下。我似乎无法找到 link 来给予信任,但这解决了它。我没有先将 canvas 转换为 uri,而是传递 canvas 并转换为 uri 并使用 link 下载,或者(对于 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);
}
}