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.