Erreur non interceptée: SECURITY_ERR: Exception DOM 18 lorsque j'essaie de définir un cookie

121

J'obtiens l'erreur suivante dans la fenêtre des outils de développement de Chrome lorsque j'essaie de définir un cookie à l'aide de ce plugin jQuery:

Erreur non interceptée: SECURITY_ERR: exception DOM 18

Que signifie cette erreur et comment puis-je la corriger? J'obtiens la même erreur lorsque j'utilise ce plugin jQuery.

Pieter
la source
Si votre problème est lié à canvas. C'est la réponse stackoverflow.com/questions/2390232/…
jose920405

Réponses:

151

Vous l'utilisez probablement sur un fichier local via le file://schéma d'URI, qui ne peut pas avoir de cookies définis. Mettez-le sur un serveur local pour pouvoir l'utiliser http://localhost.

Eli Gray
la source
26
Il m'est également arrivé d'utiliser getImageData () sur un canevas lors du chargement à partir de file: //.
Timmmm
6
Bon appel, se produit également lors de l'appel de getImageData () pour une image chargée depuis un autre hôte. Déplacement du fichier vers le même domaine / protocole / etc. le corrige.
mike clagg le
28
Astuce de pro: si Python est installé, tapez simplement python -m SimpleHTTPServerle répertoire racine de votre site et trouvez-le hébergé sur localhost: 8000 .
Thomas le
5
Pour Python 3, pour obtenir le même effet que vous devez fairepython -m http.server 8000
Kat
2
Si vous êtes un développeur iOS, vous serez peut-être intéressé de savoir que j'ai également rencontré ce problème en essayant d'utiliser localStorage après avoir chargé le HTML directement dans le contrôle UIWebView. stackoverflow.com/questions/11371441/…
Felipe Sabino
18

J'ai également eu ce problème lors du développement sur HTML5 en local. J'ai eu des problèmes avec les images et la fonction getImageData. Enfin, j'ai découvert que l'on peut lancer chrome avec le commutateur de commande --allow-file-access-from-file, qui supprime cette sécurité de protection. La seule chose est que cela rend votre navigateur moins sûr et vous ne pouvez pas avoir une instance de chrome avec l'indicateur et une autre sans l'indicateur.

alocaly
la source
4
Lorsque vous utilisez --allow-file-access-from-files (notez qu'il est maintenant au pluriel), vous devez vous rappeler que le commutateur ne prend effet que s'il n'y a pas d'autres instances de Chrome déjà en cours d'exécution.
BlueMonkMN
11

Vous pouvez également "corriger" ce problème en remplaçant l'image par sa représentation Base64 en ligne:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Utile, lorsque vous n'avez pas l'intention de publier la page sur le Web, mais de l'utiliser uniquement sur des machines locales.

Ibolit
la source
4
Une idée comment obtenir la représentation base64 d'un canevas de manière à ne pas générer cette erreur?
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

Face à la même situation en jouant avec Javascript . Malheureusement, Chrome ne permet pas d'accéder aux nœuds de calcul javascript stockés dans un fichier local.

Un type de solution de contournement ci-dessous en utilisant un stockage local consiste à exécuter Chrome avec --allow-file-access-from-files(avec sà la fin), mais une seule instance de Chrome est autorisée, ce qui n'est pas trop pratique pour moi. Pour cette raison, j'utilise Chrome Canary, avec un accès aux fichiers autorisé.

BTW dans Firefox, il n'y a pas un tel problème.

Endre Simo
la source
J'aurais aimé pouvoir voter plus d'une fois. Votre réponse m'a fait gagner des tonnes de temps à me cogner la tête contre l'écran !! Merci beaucoup!!
Jaime
@Jaime mon plaisir;)
Endre Simo
4

J'ai eu ce problème lors de l'utilisation de l'API historique.

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

Même avec un serveur local (localhost), vous souhaitez ajouter 'http: //' à votre URL afin d'avoir quelque chose de similaire à:

http://localhost...
Mr_Pouet
la source
3

Je n'étais pas complètement satisfait de la --allow-file-access-from-filessolution, car j'utilise Chrome comme navigateur principal et je n'étais pas vraiment satisfait de cette faille que j'ouvrais.

J'utilise maintenant Canary (la version bêta de chrome) pour mon développement avec le drapeau activé. Et la simple version Chrome pour mon vrai blog: les deux navigateurs ne partagent pas le drapeau!

alocaly
la source
1
Pour ceux d'entre vous curieux, c'est maintenant --allow-file-access-from-files (avec un s)
Shane Reustle
2

On peut également recevoir cette erreur si vous utilisez la nouvelle fonction de notification (jusqu'à présent uniquement pour le kit Web) avant d'obtenir l'autorisation.

Première exécution:

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

Exécution ultérieure:

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

Les fonctions d'autorisation de demande doivent être déclenchées à partir d'un événement causé par l'utilisateur, sinon elles ne seront pas affichées.

Thomas Hunter II
la source
1

J'avais cette erreur dans le safari mobile lors de l'utilisation d'ASP.NET MVC pour renvoyer un FileResult avec la surcharge qui renvoie un fichier avec un nom de fichier différent de l'original. Alors,

return File(returnFilePath, contentType, fileName);

donnerait l'erreur en safari mobile, où comme

return File(returnFilePath, contentType);

pas.

Je ne me souviens même pas pourquoi je pensais que ce que je faisais était une bonne idée. Essayer d'être intelligent je suppose.

nouveau venu
la source