Nicht erfasster Fehler: SECURITY_ERR: DOM-Ausnahme 18, wenn ich versuche, ein Cookie zu setzen


121

Beim Versuch, mit diesem jQuery-Plugin ein Cookie zu setzen, wird im Fenster der Entwicklertools von Chrome die folgende Fehlermeldung angezeigt:

Nicht erfasster Fehler: SECURITY_ERR: DOM-Ausnahme 18

Was bedeutet dieser Fehler und wie kann ich ihn beheben? Ich erhalte den gleichen Fehler, wenn ich dieses jQuery-Plugin verwende.


Wenn Ihr Problem mit der Leinwand zusammenhängt. Dies ist die Antwort stackoverflow.com/questions/2390232/…
jose920405

Antworten:


151

Sie verwenden dies höchstwahrscheinlich für eine lokale Datei über das file://URI-Schema, für die keine Cookies gesetzt werden können. Stellen Sie es auf einen lokalen Server, damit Sie es verwenden können http://localhost.


26
Auch für mich mit getImageData () auf einer Leinwand passiert, wenn aus Datei geladen: //.
Timmmm

6
Guter Aufruf, auch beim Aufrufen von getImageData () für ein von einem anderen Host geladenes Image. Verschieben der Datei in dieselbe Domäne / Protokoll / etc. behebt es.
Mike Clagg

28
Pro-Tipp: Wenn Sie Python installiert haben, geben Sie einfach python -m SimpleHTTPServerdas Stammverzeichnis Ihrer Site ein und suchen Sie es unter localhost: 8000 .
Thomas

5
Für Python 3, um den gleichen Effekt zu erzielen, müssen Siepython -m http.server 8000
Kat

2
Wenn Sie ein iOS-Entwickler sind, könnte es Sie interessieren, dass dieses Problem auch beim Versuch aufgetreten ist, localStorage zu verwenden, nachdem der HTML-Code direkt in das UIWebView-Steuerelement geladen wurde. stackoverflow.com/questions/11371441/…
Felipe Sabino

18

Ich hatte dieses Problem auch beim Entwickeln von HTML5 in local. Ich hatte Probleme mit Bildern und der Funktion getImageData. Schließlich entdeckte ich, dass man Chrome mit dem Befehlsschalter --allow-file-access-from-file starten kann, der diese Schutzsicherheit aufhebt. Das einzige ist, dass Ihr Browser dadurch weniger sicher ist und Sie nicht eine Chrome-Instanz mit aktiviertem Flag und eine andere ohne Flag haben können.


4
Wenn Sie --allow-file-access-from-files verwenden (beachten Sie, dass es jetzt Plural ist), müssen Sie berücksichtigen, dass der Wechsel nur wirksam wird, wenn keine anderen Instanzen von Chrome bereits ausgeführt werden.
BlueMonkMN

11

Sie können dies auch "beheben", indem Sie das Bild durch seine Inline-Base64-Darstellung ersetzen:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Nützlich, wenn Sie die Seite nicht im Web veröffentlichen möchten, sondern nur auf lokalen Computern verwenden möchten.


4
Haben Sie eine Idee, wie Sie die base64-Darstellung einer Zeichenfläche so abrufen können, dass dieser Fehler nicht ausgelöst wird?
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

Angesichts der gleichen Situation mit Javascript spielen . Leider erlaubt Chrome keinen Zugriff auf Javascript-Worker, die in einer lokalen Datei gespeichert sind.

Eine der folgenden Problemumgehungen bei der Verwendung eines lokalen Speichers besteht darin, Chrome mit --allow-file-access-from-files( sam Ende) auszuführen, es ist jedoch nur eine Instanz von Chrome zulässig, was für mich nicht allzu praktisch ist. Aus diesem Grund verwende ich Chrome Canary mit Dateizugriff.

Übrigens gibt es in Firefox kein solches Problem.


Ich wünschte, ich könnte mehr als einmal abstimmen. Ihre Antwort hat mir nur Tonnen von Zeit gespart, als ich meinen Kopf gegen den Bildschirm schlug !! Vielen, vielen Dank!!
Jaime

@ Jaime mein Vergnügen;)
Endre Simo


4

Ich hatte dieses Problem bei der Verwendung der Verlaufs-API.

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

Selbst mit einem lokalen Server (localhost) möchten Sie Ihrer URL 'http: //' hinzufügen, damit Sie Folgendes haben:

http://localhost...

3

Ich war mit der --allow-file-access-from-filesLösung nicht ganz zufrieden , da ich Chrome als primären Browser verwende und mit dieser Verletzung, die ich öffnete, nicht wirklich zufrieden war.

Jetzt verwende ich Canary (die Chrome Beta-Version) für meine Entwicklung mit aktivierter Flagge. Und die bloße Chrome-Version für mein echtes Bloggen: Die beiden Browser teilen nicht die Flagge!


1
Für diejenigen unter Ihnen, die neugierig sind, ist es jetzt - Erlaubter Dateizugriff von Dateien (mit einem s)
Shane Reustle

2

Dieser Fehler kann auch angezeigt werden, wenn Sie die neue Benachrichtigungsfunktion (bisher nur Webkit) verwenden, bevor Sie die Berechtigung erhalten.

Erster Lauf:

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

Später laufen:

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

Die Anforderungsberechtigungsfunktionen müssen von einem vom Benutzer verursachten Ereignis ausgelöst werden, da sie sonst nicht angezeigt werden.


1

Ich habe diesen Fehler in der mobilen Safari erhalten, als ich mit ASP.NET MVC ein FileResult mit der Überladung zurückgegeben habe, die eine Datei mit einem anderen Dateinamen als dem Original zurückgibt. So,

return File(returnFilePath, contentType, fileName);

würde den Fehler in der mobilen Safari geben, wo als

return File(returnFilePath, contentType);

würde nicht.

Ich erinnere mich nicht einmal, warum ich dachte, was ich tat, war eine gute Idee. Ich denke, ich versuche klug zu sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.