Errore non rilevato: SECURITY_ERR: eccezione DOM 18 quando provo a impostare un cookie


121

Ottengo il seguente errore nella finestra degli strumenti per sviluppatori di Chrome quando provo a impostare un cookie utilizzando questo plug-in jQuery:

Errore non rilevato: SECURITY_ERR: eccezione DOM 18

Cosa significa questo errore e come posso risolverlo? Ottengo lo stesso errore quando utilizzo questo plugin jQuery.


Se il tuo problema è correlato a canvas. Questa è la risposta stackoverflow.com/questions/2390232/...
jose920405

Risposte:


151

Molto probabilmente lo stai utilizzando su un file locale tramite lo file://schema URI, che non può avere i cookie impostati. Mettilo su un server locale in modo da poterlo usare http://localhost.


26
È successo anche per me usando getImageData () su una tela quando caricato da file: //.
Timmmm

6
Buona chiamata, accade anche quando si chiama getImageData () per un'immagine caricata da un altro host. Spostando il file nello stesso dominio / protocollo / ecc. lo risolve.
mike clagg

28
Suggerimento: se hai installato Python, digita semplicemente python -m SimpleHTTPServernella directory principale del tuo sito e trovalo ospitato su localhost: 8000 .
Thomas

5
Per Python 3, per ottenere lo stesso effetto che devi farepython -m http.server 8000
Kat

2
Se sei uno sviluppatore iOS, potresti essere interessato a sapere che ho riscontrato questo problema anche durante il tentativo di utilizzare localStorage dopo aver caricato l'HTML direttamente nel controllo UIWebView. stackoverflow.com/questions/11371441/…
Felipe Sabino

18

Ho anche avuto questo problema durante lo sviluppo di HTML5 in locale. Ho avuto problemi con le immagini e la funzione getImageData. Alla fine, ho scoperto che è possibile avviare Chrome con l'opzione di comando --allow-file-access-from-file, che elimina questa sicurezza di protezione. L'unica cosa è che rende il tuo browser meno sicuro e non puoi avere un'istanza di Chrome con il flag attivo e un altro senza il flag.


4
Quando usi --allow-file-access-from-files (nota che ora è plurale) devi ricordare che lo switch ha effetto solo se non ci sono altre istanze di Chrome già in esecuzione.
BlueMonkMN

11

Puoi anche "risolvere" questo problema sostituendo l'immagine con la sua rappresentazione Base64 inline:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Utile, quando non si intende pubblicare la pagina sul web, ma utilizzarla invece solo su macchine locali.


4
Qualche idea su come ottenere la rappresentazione base64 di una tela in modo tale da non generare questo errore?
devios1

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); return ctx.getImageData (0, 0, 128, 128);
Ray Hulha

10

Di fronte alla stessa situazione giocando con Javascript . Purtroppo Chrome non consente di accedere ai worker javascript archiviati in un file locale.

Un tipo di soluzione alternativa di seguito utilizzando una memoria locale è eseguire Chrome con --allow-file-access-from-files(con salla fine), ma è consentita solo un'istanza di Chrome, il che non è troppo conveniente per me. Per questo motivo sto utilizzando Chrome Canary, con accesso ai file consentito.

BTW in Firefox non esiste un problema del genere.


Vorrei poter votare più di una volta. La tua risposta mi ha appena salvato TONNELLATE di tempo sbattendo la testa contro lo schermo !! Molte molte grazie!!
Jaime

@Jaime mio piacere;)
Endre Simo


4

Ho riscontrato questo problema durante l'utilizzo dell'API cronologia.

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

Anche con un server locale (localhost), vuoi aggiungere "http: //" al tuo URL in modo da avere qualcosa di simile a:

http://localhost...

3

Non ero completamente soddisfatto della --allow-file-access-from-filessoluzione, perché sto usando Chrome come browser principale e non ero molto contento di questa violazione che stavo aprendo.

Ora sto usando Canary (la versione beta di Chrome) per il mio sviluppo con il flag attivato. E la semplice versione Chrome per il mio vero blogging: i due browser non condividono la bandiera!


1
Per quelli di voi curiosi, ora è --allow-file-access-from-files (with an s)
Shane Reustle

2

Si può anche ricevere questo errore se si utilizza la nuova funzionalità di notifica (finora solo webkit) prima di ottenere l'autorizzazione.

Prima corsa:

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

Esecuzione successiva:

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

Le funzioni di richiesta autorizzazione devono essere attivate da un evento causato dall'utente, altrimenti non verranno visualizzate.


1

Ho ricevuto quell'errore in Safari mobile quando utilizzavo ASP.NET MVC per restituire un FileResult con l'overload che restituisce un file con un nome di file diverso dall'originale. Così,

return File(returnFilePath, contentType, fileName);

darebbe l'errore in mobile safari, dove come

return File(returnFilePath, contentType);

non lo farei.

Non ricordo nemmeno perché pensavo che quello che stavo facendo fosse una buona idea. Sto cercando di essere intelligente, immagino.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.