"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que canvas.toDataURL() lança uma exceção de segurança ao carregar imagens de servidores diferentes?

Por que canvas.toDataURL() lança uma exceção de segurança ao carregar imagens de servidores diferentes?

Publicado em 2024-11-11
Navegar:530

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

Problema de origem cruzada no Canvas toDataURL()

Apesar de garantir descanso suficiente, os usuários podem encontrar exceções de segurança ao usar canvas.toDataURL() . Considere o seguinte código:

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"));
}

Este código tenta abrir uma imagem de um servidor diferente como dados base64 em uma nova janela, mas gera uma exceção SECURITY_ERR.

De acordo com as especificações, o método toDataURL() de um elemento canvas lança uma exceção SECURITY_ERR se seu sinalizador Origin-clean estiver definido como falso. Quando uma imagem é carregada de um servidor diferente, a tela é corrompida e seu sinalizador de limpeza de origem é definido como falso.

Portanto, não é possível usar toDataURL() diretamente para obter dados base64 para imagens provenientes de servidores diferentes. Técnicas alternativas, como CORS ou proxies, podem ser necessárias para lidar com imagens de origem cruzada.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3