Ошибка в локальном хранилище - 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:
cd /Users/myusername/Library/Application Support/Firefox/Profiles/.....default/
rm webappsstore.sqlite
Убедитесь, что другие файлы не повреждены с помощью этого сценария из TheConstructor:
for i in $(find . -name '*.sqlite'); do echo "$i"; echo "PRAGMA integrity_check;" | sqlite3 -bail "$i"; done
- Перезапустите Firefox и перезагрузите страницу.