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.

Pieter
źródło
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.

Eli Grey
źródło
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.

alocaly
źródło
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.

Ibolit
źródło
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.

Endre Simo
źródło
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...
Mr_Pouet
źródło
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!

alocaly
źródło
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.

Thomas Hunter II
źródło
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.

przybysz ponownie
źródło