Quero salvar minha tela em um img. Eu tenho esta função:
function save() {
document.getElementById("canvasimg").style.border = "2px solid";
var dataURL = canvas.toDataURL();
document.getElementById("canvasimg").src = dataURL;
document.getElementById("canvasimg").style.display = "inline";
}
Isso me dá erro:
Não detectado SecurityError: falha ao executar 'toDataURL' em 'HTMLCanvasElement': telas contaminadas não podem ser exportadas.
O que devo fazer?
javascript
html5-canvas
user3465096
fonte
fonte
Respostas:
Por motivos de segurança, sua unidade local é declarada como "outro domínio" e manchará a tela.
(Isso ocorre porque suas informações mais sensíveis provavelmente estão em sua unidade local!).
Durante o teste, tente estas soluções alternativas:
Coloque todos os arquivos relacionados à página (.html, .jpg, .js, .css, etc) na área de trabalho (não nas subpastas).
Publique suas imagens em um site compatível com compartilhamento entre domínios (como dropbox.com). Coloque suas imagens na pasta pública do dropbox e também defina o sinalizador de origem cruzada ao baixar a imagem (var img = nova imagem (); img.crossOrigin = "anônimo" ...)
Instale um servidor da web no seu computador de desenvolvimento (os servidores da Web IIS e PHP possuem edições gratuitas que funcionam bem em um computador local).
fonte
Na tag img, configure crossorigin para Anonymous.
fonte
Se alguém visualizar minha resposta, talvez você esteja nesta condição:
1. Tentando obter uma captura de tela do mapa na tela usando openlayers (versão> = 3)
2. E visualizou o exemplo da exportação de mapa
3. Usando ol.source.XYZ para renderizar a camada do mapa
Bingo!
Usando ol.source.XYZ.crossOrigin = 'Anônimo' para resolver seu confuso. Ou como o seguinte código:
fonte
Se você estiver usando a
ctx.drawImage()
função, poderá fazer o seguinte:E no seu retorno de chamada, agora você pode usá
ctx.drawImage
-lo e exportá-lo usandotoDataURL
fonte
Tainted canvases may not be exported.
mensagem de erro.No meu caso, eu estava desenhando uma tag de tela de um vídeo. Para resolver o erro de tela contaminada, tive que fazer duas coisas:
fonte
Parece que você está usando uma imagem de um URL que não definiu o cabeçalho correto de Controle de acesso-permissão de origem e, portanto, o problema. Você pode buscar essa imagem no servidor e obtê-la no servidor para evitar problemas de CORS.
fonte
Resolvi o problema usando a
useCORS: true
opçãofonte
Confira [imagem ativada para CORS] [1] no MDN. Basicamente, você deve ter um servidor que hospeda imagens com o cabeçalho apropriado Access Control Control Allow Allow Origin.
Você poderá salvar essas imagens no armazenamento DOM como se elas fossem veiculadas em seu domínio, caso contrário, você terá um problema de segurança.
fonte
Assim como a resposta da @ markE - se você deseja criar um servidor local. Você não terá esse erro em um servidor local.
Se você possui o PHP instalado no seu computador:
php -S localhost:3000
← Observe o 'S' maiúsculoou
Se você tiver o Node.js instalado no seu computador:
npm init -y
npm install live-server -g
ousudo npm install live-server -g
em um maclive-server
e ele deve abrir automaticamente uma nova guia no navegador com o site aberto.Nota: lembre-se de ter um arquivo index.html na raiz da sua pasta; caso contrário, você pode ter alguns problemas.
fonte
Eu também resolvi esse erro adicionando
useCORS : true,
no meu código como -fonte