Неперехваченная ошибка: SECURITY_ERR: DOM Exception 18, когда я пытаюсь установить cookie


121

Когда я пытаюсь установить cookie с помощью этого плагина jQuery, я получаю следующую ошибку в окне инструментов разработчика Chrome :

Неперехваченная ошибка: SECURITY_ERR: DOM Exception 18

Что означает эта ошибка и как ее исправить? Я получаю ту же ошибку, когда использую этот плагин jQuery.


Если ваша проблема связана с холстом. Это ответ stackoverflow.com/questions/2390232/…
jose920405

Ответы:


151

Скорее всего, вы используете это в локальном файле по file://схеме URI, для которой нельзя устанавливать файлы cookie. Поместите его на локальный сервер, чтобы вы могли использовать http://localhost.


26
Также случилось со мной использование getImageData () на холсте при загрузке из file: //.
Timmmm

6
Хороший вызов, также происходит при вызове getImageData () для изображения, загруженного с другого хоста. Перемещение файла в тот же домен / протокол / и т. Д. исправляет это.
Майк Клэгг

28
Совет от профессионалов: если у вас установлен Python, просто введите python -m SimpleHTTPServerкорневой каталог вашего сайта и найдите его размещенным на localhost: 8000 .
Thomas

5
Для Python 3, чтобы получить тот же эффект, который вам нуженpython -m http.server 8000
Кэт

2
Если вы разработчик iOS, вам может быть интересно узнать, что я также столкнулся с этой проблемой при попытке использовать localStorage после загрузки HTML непосредственно в элемент управления UIWebView. stackoverflow.com/questions/11371441/…
Фелипе Сабино

18

У меня также была эта проблема при разработке HTML5 на локальном уровне. У меня были проблемы с изображениями и функцией getImageData. Наконец, я обнаружил, что можно запустить Chrome с помощью переключателя команд --allow-file-access-from-file, что избавит от этой защиты. Единственное, это делает ваш браузер менее безопасным, и у вас не может быть одного экземпляра chrome с включенным флагом, а другого без флага.


4
Когда вы используете --allow-file-access-from-files (обратите внимание, что оно теперь во множественном числе), вы должны помнить, что переключатель вступает в силу только в том случае, если еще не запущены другие экземпляры Chrome.
BlueMonkMN

11

Вы также можете "исправить" это, заменив изображение его встроенным представлением Base64:

img.src= "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
Полезно, если вы не собираетесь публиковать страницу в Интернете, а вместо этого используете ее только на локальных машинах.


4
Есть идеи, как получить представление холста в формате base64 таким образом, чтобы не возникало этой ошибки?
devios1

var canvas = document.createElement ("холст"); 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

Столкнулся с той же ситуацией, играя с Javascript , К сожалению, Chrome не позволяет получить доступ к работникам javascript, хранящимся в локальном файле.

Один из способов обхода, описанных ниже с использованием локального хранилища, - это запуск Chrome с --allow-file-access-from-filessв конце), но разрешен только один экземпляр Chrome, что для меня не слишком удобно. По этой причине я использую Chrome Canary с разрешенным доступом к файлам.

Кстати, в Firefox такой проблемы нет.


Хотел бы я проголосовать больше одного раза. Ваш ответ сэкономил мне ТОННУ времени, бьющегося головой об экран !! Огромное спасибо!!
Jaime

@Jaime, с удовольствием;)
Эндре Симо


4

У меня возникла эта проблема при использовании API истории.

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

Даже с локальным сервером (localhost) вы хотите добавить http: // к своему URL-адресу, чтобы получить что-то похожее на:

http://localhost...

3

Я не был полностью доволен этим --allow-file-access-from-filesрешением, потому что я использую Chrome в качестве основного браузера, и был не очень доволен открывшейся мною брешь.

Теперь я использую Canary (бета-версию Chrome) для разработки с включенным флагом. И простая версия Chrome для моего настоящего блога: два браузера не разделяют флаг!


1
Для тех из вас, кому интересно, теперь это --allow-file-access-from-files (с
буквой

2

Эту ошибку также можно получить при использовании новой (пока только для webkit) функции уведомления перед получением разрешения.

Первый забег:

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

Позже запустить:

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

Функции разрешения запроса должны запускаться из события, вызванного пользователем, иначе оно не будет отображаться.


1

Я получал эту ошибку в мобильном сафари при использовании ASP.NET MVC для возврата FileResult с перегрузкой, которая возвращает файл с именем, отличным от исходного. Так,

return File(returnFilePath, contentType, fileName);

выдаст ошибку в мобильном сафари, где, как

return File(returnFilePath, contentType);

не стал бы.

Я даже не помню, почему я думал, что то, что я делаю, было хорошей идеей. Думаю, пытаюсь быть умным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.