Nieprzechwycony błąd: SECURITY_ERR: DOM Wyjątek 18, gdy próbuję ustawić plik cookie


121

Gdy próbuję ustawić plik cookie za pomocą tej wtyczki jQuery, pojawia się następujący błąd w oknie narzędzi programistycznych Chrome :

Nieprzechwycony błąd: SECURITY_ERR: DOM Wyjątek 18

Co oznacza ten błąd i jak mogę go naprawić? Otrzymuję ten sam błąd, gdy używam tej wtyczki jQuery.


Jeśli twój problem jest związany z płótnem. To jest odpowiedź stackoverflow.com/questions/2390232/ ...
— jose920405

Odpowiedzi:


151

Najprawdopodobniej używasz tego w pliku lokalnym za pośrednictwem file://schematu URI, który nie może mieć ustawionych plików cookie. Umieść go na serwerze lokalnym, abyś mógł używać http://localhost.


26
Zdarzyło mi się to również przy użyciu metody getImageData () na płótnie po załadowaniu z pliku: //.
— Timmmm

6
Dobre wywołanie, również dzieje się podczas wywoływania metody getImageData () dla obrazu załadowanego z innego hosta. Przeniesienie pliku do tej samej domeny / protokołu / etc. naprawia to.
— mike clagg

28
Wskazówka dla profesjonalistów: jeśli masz zainstalowany Python, po prostu wpisz python -m SimpleHTTPServerkatalog główny swojej witryny i znajdź ją hostowaną na localhost: 8000 .
— Thomas

5
W przypadku Pythona 3, aby uzyskać ten sam efekt, musisz zrobićpython -m http.server 8000
— Kat

2
Jeśli jesteś programistą iOS, możesz być zainteresowany, aby wiedzieć, że wystąpił ten problem również podczas próby użycia localStorage po załadowaniu kodu HTML bezpośrednio do kontrolki UIWebView. stackoverflow.com/questions/11371441/…
— Felipe Sabino

18

Miałem też ten problem podczas tworzenia na HTML5 w lokalnym. Miałem problemy z obrazami i funkcją getImageData. Wreszcie odkryłem, że można uruchomić Chrome za pomocą przełącznika poleceń --allow-file-access-from-file, który pozbywa się tego zabezpieczenia. Jedyną rzeczą jest to, że sprawia, że ​​twoja przeglądarka jest mniej bezpieczna i nie możesz mieć jednej instancji chrome z włączoną flagą, a drugiej bez flagi.


4
Kiedy używasz --allow-file-access-from-files (zauważ, że teraz jest to liczba mnoga), musisz pamiętać, że przełącznik działa tylko wtedy, gdy nie ma już uruchomionych innych instancji Chrome.
— BlueMonkMN

11

Możesz również "naprawić" ten problem, zastępując obraz jego wbudowaną reprezentacją Base64:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Przydatne, gdy nie zamierzasz publikować strony w sieci, a zamiast tego używać jej tylko na komputerach lokalnych.


4
Masz jakiś pomysł, jak uzyskać reprezentację base64 płótna w taki sposób, aby nie zgłaszała tego błędu?
— devios1

var canvas = document.createElement ("płótno"); 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

W tej samej sytuacji grając z Javascriptem . Niestety Chrome nie pozwala na dostęp do pracowników javascript przechowywanych w pliku lokalnym.

Jednym z poniższych obejść przy użyciu pamięci lokalnej jest uruchomienie Chrome z --allow-file-access-from-files( sna końcu), ale dozwolone jest tylko jedno wystąpienie Chrome, co nie jest dla mnie zbyt wygodne. Z tego powodu używam Chrome Canary z dozwolonym dostępem do plików.

BTW w Firefoksie nie ma takiego problemu.


Chciałbym móc zagłosować za więcej niż raz. Twoja odpowiedź właśnie zaoszczędziła mi TONY czasu uderzając głową o ekran! Wielkie dzięki!!
— Jaime

@Jaime my pleasure;)
— Endre Simo


4

Miałem ten problem podczas korzystania z API historii.

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

Nawet z serwerem lokalnym (localhost) chcesz dodać „http: //” do swojego adresu URL, aby uzyskać coś podobnego do:

http://localhost...

3

Nie byłem do końca zadowolony z --allow-file-access-from-filesrozwiązania, ponieważ używam Chrome jako mojej podstawowej przeglądarki i nie byłem zadowolony z tego naruszenia, które otwierałem.

Teraz używam Canary (wersja beta Chrome) do programowania z włączoną flagą. I zwykła wersja Chrome do mojego prawdziwego blogowania: dwie przeglądarki nie mają tej samej flagi!


1
Dla zaciekawionych, teraz jest --allow-file-access-from-files (with a s)
— Shane Reustle

2

Ten błąd można również otrzymać, korzystając z nowej (dotychczas tylko webkitowej) funkcji powiadamiania przed uzyskaniem pozwolenia.

Pierwszy bieg:

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

Później bieg:

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

Funkcje żądania uprawnień muszą być wyzwalane przez zdarzenie wywołane przez użytkownika, w przeciwnym razie nie zostaną wyświetlone.


1

Otrzymywałem ten błąd w mobilnym safari, gdy używam ASP.NET MVC do zwrócenia FileResult z przeciążeniem, które zwraca plik o innej nazwie niż oryginał. Więc,

return File(returnFilePath, contentType, fileName);

poda błąd w mobilnym safari, gdzie jako

return File(returnFilePath, contentType);

nie.

Nie pamiętam nawet, dlaczego uważałem, że to, co robię, było dobrym pomysłem. Chyba staram się być sprytny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.