”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么从不同服务器加载图像时canvas.toDataURL()会抛出安全异常?

为什么从不同服务器加载图像时canvas.toDataURL()会抛出安全异常?

发布于2024-11-11
浏览:437

Why Does canvas.toDataURL() Throw a Security Exception When Loading Images From Different Servers?

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