#Что происходит и как распознать неисправность
Исключение SecurityError при обращении к window.localStorage означает, что браузер не предоставляет хранилище данному контексту. Это бывает для file:/data: страниц, ограниченных настроек приватности, заблокированных сторонних ресурсов или правил предприятия. Очистка кэша не является универсальным исправлением.
#Как отличить причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Страница открыта как файлВ адресной строке показан file:///.... | Локальная разработка работает по-разному в браузерах. | Запустите проект через локальный HTTP-сервер. |
| Хранение запрещено политикойБраузер блокирует сохранение данных для сайта/стороннего контекста. | Ошибка проявляется после изменения настроек конфиденциальности. | Обрабатывайте исключение и запрашивайте разрешение штатно. |
| Недопустимый контекст или фреймСтраница открыта из sandbox iframe или data URL. | В обычной вкладке хранилище работает, во фрейме — нет. | Измените архитектуру хранения с учётом ограничений безопасности. |
#Пошаговая диагностика и исправление
- Получите название исключения и контекстОткройте страницу, нажмите F12 → «Консоль», повторите действие и запишите SecurityError вместе с адресом страницы без секретов. Если вместо него QuotaExceededError, это другая ситуация — данные слишком велики или недоступна квота, нужны отдельные проверки.
- Проверьте схему в адресной строкеПосмотрите начало адреса:
file:,data:,http:илиhttps:. При file:// не рассчитывайте на стабильность localStorage. Для разработки откройте проект через штатный сервер редактора или приложение, напримерpython -m http.server 8000из папки статического проекта, а затем посетитеhttp://localhost:8000в браузере; не публикуйте такой сервер наружу. - Проверьте доступ без записи важных данныхВ DevTools на доверенной тестовой странице попробуйте
try { console.log(window.localStorage.length) } catch (e) { console.log(e.name) }. Чтение свойства может выбросить SecurityError. Не вызывайте localStorage.clear(): это удалит все данные сайта и не устранит ограничения политики. - Выясните, не запрещено ли хранение браузеромОткройте настройки приватности своего браузера через его обычное меню и проверьте ограничения файлов cookie/данных сайтов и исключения для текущего сайта. Названия отличаются по браузеру и версии; корпоративные параметры могут быть заблокированы администратором. Не отключайте общую защиту приватности ради работы одного сайта.
- Обрабатывайте отсутствие хранилища в кодеОберните обращение к localStorage (включая получение свойства) в try/catch и предусмотрите работу без сохранения между сеансами. Для небольших временных настроек можно использовать память приложения, сообщив пользователю, что данные исчезнут после закрытия вкладки. Не сохраняйте секреты и токены доступа в localStorage.
- Если страница во фрейме, проверьте политику встраиванияПосмотрите HTML iframe, sandbox, настройки сторонних данных и источник вложенной страницы. Если storage запрещён политикой, не пытайтесь обойти запрет; при необходимости перенесите сохранение на собственный сервер с авторизацией и защищённым соединением. Учитывайте согласие пользователя на хранение данных.
- Проверьте страницу в допустимом режиме и откатОткройте страницу по HTTPS на доверенном адресе, запустите штатное действие и убедитесь, что SecurityError не ломает интерфейс даже при запрете хранения. Если после изменения политики стало хуже, верните прежние настройки браузера и архитектуру обработки. Не проверяйте работоспособность только в одном браузере.
#Команды и примеры для проверки
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 на одном устройстве не гарантирует того же у всех посетителей.