Erro não capturado: SECURITY_ERR: DOM Exceção 18 quando tento definir um cookie

121

Recebo o seguinte erro na janela de ferramentas do desenvolvedor do Chrome quando tento definir um cookie usando este plugin jQuery:

Erro não capturado: SECURITY_ERR: exceção 18 do DOM

O que esse erro significa e como posso corrigi-lo? Eu recebo o mesmo erro quando uso este plugin jQuery.

Pieter
fonte
Se o seu problema estiver relacionado à tela. Esta é a resposta stackoverflow.com/questions/2390232/…
jose920405

Respostas:

151

Você provavelmente está usando isso em um arquivo local pelo file://esquema de URI, que não pode ter cookies definidos. Coloque-o em um servidor local para que você possa usá-lo http://localhost.

Eli Gray
fonte
26
Também aconteceu comigo usando getImageData () em uma tela quando carregado do arquivo: //.
Timmmm 23/01
6
Boa chamada, também acontece ao chamar getImageData () para uma imagem carregada de outro host. Movendo o arquivo para o mesmo domínio / protocolo / etc. corrige isso.
Mike clagg
28
Dica profissional: se você possui o Python instalado, basta digitar python -m SimpleHTTPServero diretório raiz do seu site e encontrá-lo hospedado em localhost: 8000 .
Thomas
5
Para Python 3, para obter o mesmo efeito que você precisa fazerpython -m http.server 8000
Kat
2
Se você é um desenvolvedor iOS, pode estar interessado em saber que também tive esse problema ao tentar usar o localStorage depois de carregar o HTML diretamente no controle UIWebView. stackoverflow.com/questions/11371441/…
Felipe Sabino
18

Eu também tive esse problema ao desenvolver no HTML5 local. Eu tive problemas com imagens e função getImageData. Por fim, descobri que é possível iniciar o chrome com a opção de comando --allow-file-access-from-file, que se livra dessa segurança de proteção. A única coisa é que isso torna seu navegador menos seguro e você não pode ter uma instância do Chrome com o sinalizador ativado e outra sem o sinalizador.

alocaly
fonte
4
Quando você usa --allow-file-access-from-files (observe que agora é plural), lembre-se de que a opção só entra em vigor se não houver outras instâncias do Chrome em execução.
BlueMonkMN
11

Você também pode "consertar" isso substituindo a imagem por sua representação Base64 embutida:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Útil, quando você não pretende publicar a página na Web, mas use-a apenas em máquinas locais.

Ibolit
fonte
4
Alguma idéia de como obter a representação base64 de uma tela de forma que ela não gere esse erro?
precisa saber é o seguinte
var canvas = document.createElement ("canvas"); canvas.width = 128; canvas.height = 128; var ctx = canvas.getContext ('2d'); ctx.fillRect (25,25,100,100); ctx.clearRect (45,45,60,60); ctx.strokeRect (50,50,50,50); retornar ctx.getImageData (0, 0, 128, 128);
Ray Hulha 27/05
10

Diante da mesma situação jogando com Javascript . Infelizmente, o Chrome não permite acessar trabalhadores de javascript armazenados em um arquivo local.

Um tipo de solução alternativa abaixo, usando um armazenamento local, é executar o Chrome com --allow-file-access-from-files( sno final), mas apenas uma instância do Chrome é permitida, o que não é muito conveniente para mim. Por esse motivo, estou usando o Chrome Canary, com acesso a arquivos permitido.

Aliás, no Firefox, não existe esse problema.

Endre Simo
fonte
Eu gostaria de poder votar mais de uma vez. Sua resposta me salvou MUITO tempo batendo minha cabeça contra a tela !! Muitíssimo obrigado!!
Jaime
@Jaime my prazer;)
Endre Simo
4

Eu tive esse problema ao usar a API do histórico.

window.history.pushState(null, null, URL);

Mesmo com um servidor local (localhost), você deseja adicionar 'http: //' ao seu URL para ter algo semelhante a:

http://localhost...
Mr_Pouet
fonte
3

Eu não estava completamente feliz com o --allow-file-access-from-files solução, porque estou usando o Chrome como meu navegador principal e não estava muito feliz com essa brecha que estava abrindo.

Agora estou usando o Canary (a versão beta do chrome) para o meu desenvolvimento com a bandeira ativada. E a mera versão do Chrome para os meus blogs reais: os dois navegadores não compartilham a bandeira!

alocaly
fonte
1
Para aqueles de vocês curioso, é agora --allow-file-access-from-arquivos (com um s)
Shane Reustle
2

Também é possível receber esse erro se você estiver usando o novo recurso de notificação (até agora webkit) antes de obter permissão.

Primeira corrida:

<!-- Get permission -->
<button onclick="webkitNotifications.requestPermission();">Enable Notifications</button>

Execute mais tarde:

// Display Notification:
window.webkitNotifications.createNotification('image', 'Title', 'Body').show();

As funções de permissão de solicitação precisam ser acionadas a partir de um evento causado pelo usuário, caso contrário, não serão exibidas.

Thomas Hunter II
fonte
1

Eu estava recebendo esse erro no Safari móvel ao usar o ASP.NET MVC para retornar um FileResult com a sobrecarga que retorna um arquivo com um nome de arquivo diferente do original. Assim,

return File(returnFilePath, contentType, fileName);

daria o erro no safari móvel, onde, como

return File(returnFilePath, contentType);

não faria.

Nem me lembro por que pensei que o que estava fazendo era uma boa ideia. Tentando ser esperto, eu acho.

de novo
fonte