JavaScript WindowsLinuxmacOS

JavaScript: localStorage выдаёт SecurityError при ограничениях браузера

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

localStorage выдаёт SecurityError: определите происхождение страницы, ограничения приватности и политику браузера, обрабатывайте запрет хранения без удаления пользовательских данных.

В этой статье
  1. Что происходит и как распознать неисправность
  2. Как отличить причины
  3. Пошаговая диагностика и исправление
  4. Команды и примеры для проверки
  5. Как проверить результат и что делать дальше

#Что происходит и как распознать неисправность

Исключение SecurityError при обращении к window.localStorage означает, что браузер не предоставляет хранилище данному контексту. Это бывает для file:/data: страниц, ограниченных настроек приватности, заблокированных сторонних ресурсов или правил предприятия. Очистка кэша не является универсальным исправлением.

#Как отличить причины

Возможная причинаКак узнатьЧто делать
Страница открыта как файлВ адресной строке показан file:///....Локальная разработка работает по-разному в браузерах.Запустите проект через локальный HTTP-сервер.
Хранение запрещено политикойБраузер блокирует сохранение данных для сайта/стороннего контекста.Ошибка проявляется после изменения настроек конфиденциальности.Обрабатывайте исключение и запрашивайте разрешение штатно.
Недопустимый контекст или фреймСтраница открыта из sandbox iframe или data URL.В обычной вкладке хранилище работает, во фрейме — нет.Измените архитектуру хранения с учётом ограничений безопасности.

#Пошаговая диагностика и исправление

  1. Получите название исключения и контекстОткройте страницу, нажмите F12 → «Консоль», повторите действие и запишите SecurityError вместе с адресом страницы без секретов. Если вместо него QuotaExceededError, это другая ситуация — данные слишком велики или недоступна квота, нужны отдельные проверки.
  2. Проверьте схему в адресной строкеПосмотрите начало адреса: file:, data:, http: или https:. При file:// не рассчитывайте на стабильность localStorage. Для разработки откройте проект через штатный сервер редактора или приложение, например python -m http.server 8000 из папки статического проекта, а затем посетите http://localhost:8000 в браузере; не публикуйте такой сервер наружу.
  3. Проверьте доступ без записи важных данныхВ DevTools на доверенной тестовой странице попробуйте try { console.log(window.localStorage.length) } catch (e) { console.log(e.name) }. Чтение свойства может выбросить SecurityError. Не вызывайте localStorage.clear(): это удалит все данные сайта и не устранит ограничения политики.
  4. Выясните, не запрещено ли хранение браузеромОткройте настройки приватности своего браузера через его обычное меню и проверьте ограничения файлов cookie/данных сайтов и исключения для текущего сайта. Названия отличаются по браузеру и версии; корпоративные параметры могут быть заблокированы администратором. Не отключайте общую защиту приватности ради работы одного сайта.
  5. Обрабатывайте отсутствие хранилища в кодеОберните обращение к localStorage (включая получение свойства) в try/catch и предусмотрите работу без сохранения между сеансами. Для небольших временных настроек можно использовать память приложения, сообщив пользователю, что данные исчезнут после закрытия вкладки. Не сохраняйте секреты и токены доступа в localStorage.
  6. Если страница во фрейме, проверьте политику встраиванияПосмотрите HTML iframe, sandbox, настройки сторонних данных и источник вложенной страницы. Если storage запрещён политикой, не пытайтесь обойти запрет; при необходимости перенесите сохранение на собственный сервер с авторизацией и защищённым соединением. Учитывайте согласие пользователя на хранение данных.
  7. Проверьте страницу в допустимом режиме и откатОткройте страницу по HTTPS на доверенном адресе, запустите штатное действие и убедитесь, что SecurityError не ломает интерфейс даже при запрете хранения. Если после изменения политики стало хуже, верните прежние настройки браузера и архитектуру обработки. Не проверяйте работоспособность только в одном браузере.

#Команды и примеры для проверки

Текст
Пример чтения с обработкой именно SecurityError. Для записи setItem также нужен try/catch, включая QuotaExceededError; ошибка не должна скрываться для остальных случаев.
function safeGet(key) {
  try {
    return window.localStorage.getItem(key);
  } catch (error) {
    if (error?.name === "SecurityError") return null;
    throw error;
  }
}
console.log(safeGet("theme"));

#Как проверить результат и что делать дальше

Исправление подтверждено, когда сайт не падает с SecurityError и умеет корректно работать без локального хранения. Разрешение localStorage на одном устройстве не гарантирует того же у всех посетителей.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.