Canvas toDataURL()的跨源问题
尽管保证充分休息,但用户在使用canvas.toDataURL()时可能会遇到安全异常。考虑以下代码:
var frame = document.getElementById("viewer");
frame.width = 100;
frame.height = 100;
var ctx = frame.getContext("2d");
var img = new Image();
img.src = "http://www.ansearch.com/images/interface/item/small/image.png"
img.onload = function() {
// Draw image
ctx.drawImage(img, 0, 0)
// Security exception occurs here:
window.open(frame.toDataURL("image/png"));
}
此代码尝试在新窗口中以 Base64 数据形式打开来自不同服务器的图像,但会引发 SECURITY_ERR 异常。
根据规范,toDataURL() 方法如果画布元素的 origin-clean 标志设置为 false,则会抛出 SECURITY_ERR 异常。当从不同的服务器加载图像时,画布会被污染,并且其 origin-clean 标志设置为 false。
因此,无法直接使用 toDataURL() 获取源自以下位置的图像的 Base64 数据:不同的服务器。可能需要使用 CORS 或代理等替代技术来处理跨源图像。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3