Como evitar o erro "A tela foi contaminada por dados de origem cruzada" em getImageData()
Ao usar getImageData( ) para recuperar dados de pixel de uma tela, você poderá encontrar o erro "A tela foi contaminada por dados de origem cruzada". Este erro ocorre quando você tenta acessar dados de pixel em uma tela que foi afetada por dados carregados de outro domínio.
Para entender a causa desse erro, considere o sandbox de segurança implementado na maioria dos navegadores. Por padrão, os navegadores restringem a comunicação entre diferentes origens, o que significa que os dados carregados de um domínio não podem ser usados por um domínio diferente. Se um elemento de tela estiver contaminado com dados de uma origem diferente, ele será considerado "contaminado".
Uma maneira comum de contaminar uma tela é carregar uma imagem de um URL de subdomínio, como você mencionou em seu código. Para evitar esse erro, existem várias opções:
1. Defina o atributo "crossOrigin"
Atribua o atributo "crossOrigin" ao elemento de imagem com o valor apropriado:
Isso permite que seu script acesse dados de pixel da imagem, assumindo que o servidor remoto defina os cabeçalhos CORS apropriados.
2. Certifique-se de que os cabeçalhos CORS estejam definidos
No servidor remoto que atende a imagem, certifique-se de que ele envia os seguintes cabeçalhos CORS:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET Access-Control-Allow-Headers: Content-Type
Esses cabeçalhos concedem acesso de origem cruzada ao seu script e permitem que ele recupere dados de imagem da tela.
3. Use um servidor proxy
Se não for viável definir cabeçalhos CORS no servidor remoto, você pode usar um servidor proxy para ignorar a restrição de origem cruzada. Um servidor proxy atua como intermediário entre o seu script e o servidor remoto, facilitando a transferência de dados entre diferentes origens.
Ao implementar uma dessas soluções, você pode evitar a mensagem "A tela foi contaminada por cross- erro de dados de origem" em getImageData() e acesse dados de pixel de imagens carregadas de domínios diferentes.
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