Ищем Решение Проблемы Потери Данных При Сбое Фокса

Так получилось, что за последние несколько дней Firefox дважды не закрывался нормально.

Первый раз он честно сдался (вылетел) после долгой интенсивной работы, имея на борту более 50 расширений, а второй раз: пришел сегодня на работу, а компьютер был выключен.

Оказалось, что электричество отключили.

Впервые заметил, что не сохраняются настройки одного расширения, которое я использовал в тот момент. Мне пришлось настроить его заново.

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

Немного поискав, я обнаружил, что Firefox сохраняет настройки в файл prefs.js. (находится в папке C:\Documents and Settings\User\Application Data\Mozilla\Firefox\Profiles\sDgUfwhg.default\prefs.js) только при очередном закрытии (и при некоторых других движениях, которые выявились в ходе расследования).

Но в наши дни браузер почти никогда не закрывается.

Значит, должно быть решение ;) Есть типичная ситуация: Поэтому я просто внес некоторые изменения в настройки расширения (например, добавил сайт в белый список BetterCache или Stop Autoplay).

Я точно знаю, что эти настройки хранятся в prefs.js, то есть фактически сохранятся на винт при закрытии браузера.

И так, чтобы не потерять проделанную работу, сейчас есть желание закрыть и открыть браузер (или перезапустить), но очень не хочется, так как открыто много вкладок, да и вообще браузер не должен быть закрытым.

Получается, что если ничего не делать и продолжать работать, то с большой вероятностью такие данные будут потеряны.

Аналогичная проблема существует и с приложениями Windows, хранящими данные в реестре: очень редко, но случалось, что я получал BSOD и после загрузки замечал, что настройки некоторых программ «забывали» все мои последние изменения.

То есть изменения в реестре тоже не сразу сохраняются на винт. В этой ситуации с Firefox я начал искать решение по сохранению настроек, а точнее, как сбросить настройки в файл prefs.js, не закрывая браузер.

Я думал, что возможно уже есть какое-то расширение, но поиск на addons.mozilla.org не дал результатов (просто еще раз убедился, что поиска у них нет).

Затем я начал гуглить про сброс «prefs.js» и нашел 2 разумные страницы: www.softwarepunk.com/blog/firefox-preferences-flush.html fixunix.com/mozilla/408327-savepreffile-doesnt-really-work.html Итак, через полчаса у меня уже был код:

Components.classes["@mozilla.org/preferences-service;1"].

getService(Components.interfaces.nsIPrefService).

savePrefFile(null)

Но когда я запустил его в консоли Firebug, я получил: Ошибка: Разрешение отклонено для <…> чтобы получить свойство XPCComponents.classes Для любой страницы любого сайта.

Тогда я подумал, что надо попробовать не на сайтах, а на внутренних страницах Firefox. Пробую about:config - типичная задержка и нет сообщения об ошибке.

Смотрю prefs.js — обновился.

Проверил текстовым поиском наличие доменов, которые я добавил в белый список - они присутствуют, а значит последние изменения точно сохраняются.

Теперь следующая задача: как сделать сохранение удобным? Моя первая мысль — букмарклет. Я создаю закладку и указываю ее в Location:

javascript:Components.classes["@mozilla.org/preferences-service;1"].

getService(Components.interfaces.nsIPrefService).

savePrefFile(null)

Пробую с открытой страницей about:config - работает, на всех остальных - разрешение отказано.

Вот где я застрял.

Как сделать так, чтобы кнопка срабатывала независимо от того, какой сайт открыт? (открыть скриптом about:config, запустить там код и закрыть? Думаю, это не сработает по той же причине, по которой получаем Permission Dened — нарушение безопасности).

Как сделать нормальную кнопку, или чтобы кнопка вообще не была нужна, а просто чтобы периодически срабатывал код сохранения? (Напишите расширение? У меня нет опыта, если есть кто-то более опытный, помогите).

УПД.

Нашёлся хороший человек, смотрите первый комментарий.

Сейчас я вручную открываю about:config и нажимаю на кнопку букмарклета, для которого я сделал иконку

Ищем решение проблемы потери данных при сбое Фокса

( скачать ).

Я установил значок с помощью расширения Выбор значка 3 .



Пятнистый

Сохранение при нажатии на такой букмарклет происходит только в том случае, если в настройках действительно что-то изменилось.

В противном случае ничего не происходит, prefs.js не трогается, и тогда заметной задержки при нажатии кнопки нет. Это очень хорошо для периодического сохранения в фоновом режиме, если это как-то сделать.



Связанные мысли

По-хорошему, это расширения должны сбрасываться при закрытии окна своих настроек, а не пользователя.

Firefox также мог делать это периодически, а не только при закрытии и, как выяснилось в ходе исследования, когда происходят изменения в настройках браузера (окно «Параметры» или вкладка «about:config»).

Каждый раз менять что-то в настройках или менять произвольный логический параметр взад и вперед в таблице about:config тоже вариант, но все равно это не то.

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

Теги: #Firefox #bookmarklet #данные пользователя #Firefox

Вместе с данным постом часто просматривают: