Ошибка в локальном хранилище - NS_ERROR_FILE_CORRUPTED - firefox

Я работаю в веб-приложении, и я использую локальное хранилище. Но для некоторых пользователей Firefox я заметил, что они имеют следующую ошибку:

NS_ERROR_FILE_CORRUPTED: Код возврата компонента: 0x8052000b (NS_ERROR_FILE_CORRUPTED) [nsIDOMStorage.setItem]

когда он вызывает функцию:

function setLocalStorageItem(key, value){ 
        localStorage.setItem(key, JSON.stringify(value));
}

Это способ избежать этой ошибки?

Ответы

Ответ 1

Это ошибка на уровне браузера: вы, вероятно, не сделали ничего плохого, чтобы вызвать эту ошибку. Браузер (или используемая им библиотека SQLite) либо сделал что-то неправильно, либо файл был оставлен в недопустимом состоянии из-за проблемы с оборудованием.

Вы действительно не можете предотвратить эту проблему, за исключением того, что присоединились к команде разработчиков Firefox и сделали систему хранения браузера более устойчивой к ошибкам. Кажется, что нет никакого способа восстановить данные из этой ошибки, поэтому вам нужно будет обнаружить эту ошибку и сообщить пользователям, как удалять их хранилище браузера в соответствии с это сообщение MDN:

try {
    setLocalStorageItem(key, value);
} catch(e) {
    if(e.name == "NS_ERROR_FILE_CORRUPTED") {
        showMessageSomehow("Sorry, it looks like your browser storage has been corrupted. Please clear your storage by going to Tools -> Clear Recent History -> Cookies and set time range to 'Everything'. This will remove the corrupted browser storage across all sites.");
    }
}

Обратите внимание, что блок catch должен убедиться, что ошибка является ошибкой NS_ERROR_FILE_CORRUPTED. Я считаю, что мой чек на e.name верен, но вы должны убедиться в этом сами.

Ответ 2

После того, как файлы сбоя ОС в папке профиля Firefox могут быть повреждены и привести к неработоспособным веб-сайтам (в моем случае, по иронии судьбы, на рынке Firefox). Здесь webappsstore.sqlite было затронуто.

Как пользователь @Oli заявил в Спросить Ubuntu

Firefox сохраняет свои данные HTML5 в файле, называемом webappsstore.sqlite. Это сидит в вашем профиле, который скрывается где-то в ~/.mozilla/firefox/.... default/(в зависимости от вашего профиля называется).

Измените это и перезапустите Firefox, и все придет вернуться к жизни.

Подробнее: https://developer.mozilla.org/en/dom/storage

Если вы удалили/удалили из своей папки профиля, Firefox создаст новый, дезинфицированный файл webappsstore.sqlite. Работал для меня.
Информация о том, где найти вашу папку профиля, может быть доступна здесь.

Ответ 3

Если бы эта проблема возникла только с одним из наших клиентов.

Полностью удалив history и (думаю, это важная часть) offline website data решила проблему.

(версия Firefox 40.0.3)

Ответ 4

Не уверен, что это помогает, но у меня есть эта проблема на Джире. Я перезапустил Firefox с отключенными аддонами и вэнь Цзирой, и это сработало. Затем я остановил Firefox и перезапустил его с включенными Addons, и он снова работал. Я не знаю, почему это сработало:) Я использую Firefox Developer edition 48.0a2 (2016-05-24)

Ответ 5

Очистка всего через настройки Firefox может не полностью очистить локальное хранилище, где находится поврежденный файл SQLite.

На данный момент у вас есть два варианта:

localStorage.clear()
sessionStorage.clear()
  • Используйте терминал, чтобы удалить поврежденный файл SQLite, и заставьте Firefox восстановить его.

Действия для пользователей MacOS:

  1. cd /Users/myusername/Library/Application Support/Firefox/Profiles/.....default/
  2. rm webappsstore.sqlite
  3. Убедитесь, что другие файлы не повреждены с помощью этого сценария из TheConstructor:

    for i in $(find . -name '*.sqlite'); do echo "$i"; echo "PRAGMA integrity_check;" | sqlite3 -bail "$i"; done

  4. Перезапустите Firefox и перезагрузите страницу.