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

    Так получилось, что за несколько последних дней Firefox не закрывался нормально дважды. Первый раз он честно сдался (crash) после длительного периода интенсивной работы, неся на борту более 50 экстеншинов, а второй раз: пришел сегодня на работу — а комп выключен. Оказалось, электричество вырубали…

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

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

    Но браузер в наше время практически никогда не закрывается… Значит должно быть решение ;)


    Имеется типичная ситуация:
    Вот я только что внёс некоторые поправки в настройки экстеншина (например, добавил сайт в белый список BetterCache, или Stop Autoplay). Точно знаю, то эти настройки хранятся в prefs.js, то есть они будут реально сохранены на винт при закрытии браузера. И вот, чтобы не потерять проделанную работу, теперь возникает желание закрыть и открыть браузер (или сделать restart), но очень не хочется, так как открыто множество вкладок, и вообще браузер не должен закрываться. Получается, что если ничего не сделать и продолжить работать, то с большой вероятностью такие данные будут потеряны.

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

    В данной ситуации с Firefox, я начал искать решение для сохранения настроек, а точнее, как сделать flush настроек в файл prefs.js, не закрывая браузер.

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

    Потом начал гуглить на тему «prefs.js» flush и нашел 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, я получал:
    Error: Permission denied for <…> to get property XPCComponents.classes
    Для любой страницы любого сайта.

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

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

    Первая мысль — букмарклет. Создаю закладку, прописываю ей в Location:
    javascript:Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).savePrefFile(null)
    Пробую при открытой странице about:config — работает, на всех других — Permission denied.

    Вот на этом я и застрял.

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

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

    Пока что я вручную открываю about:config и жму на кнопочку букмарклета, для которой сделал иконку image (загрузить).
    Иконку поставил с помощью экстеншина Favicon Picker 3.

    Замечено

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

    Попутные мысли

    По-хорошему, это экстеншини должны делать flush при закрытии окна своих настроек, а не пользователь. Так же и Firefox мог бы делать это периодически, а не только при закрытии и, как выяснилось про процессе исследований, при изменениях в настройках браузера (окно Options или вкладка about:config). Идти каждый раз что-то менять в настройках, или в таблице about:config поменять туда и обратно произвольный boolean-параметр — тоже вариант, но всё же не то…

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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 50

      +26
      Сделал для вас расширение: dl.dropbox.com/u/133677/PrefsFlush_1.0.0.xpi
      Раз в минуту делает flush и больше ничего не умеет. Распространяется как есть, делайте с ним что хотите :-)
        0
        Установил, проверил — работает! Больше ничего и не надо :) Интервал, кому надо, поправит в исходниках.
        Огромное Вам спасибо. Нашелся таки хороший человек.

          0
          Ну значит скоро будет топик о том, что Firefox упал по прицине испорченного конфига :). Настройки-то он не просто так в файл скидывает не сразу…
            0
            Кстати, правда — почему? Может для этого есть причины? Какие?
            Если их нет — то почему не создать баг по этому поводу в багзилле? Так появится 1% вероятности, что это исправят.
              0
              Уверен на оставшиеся 99%, что по той же самой причине, по которой после падения лисы появляется вкладка восстановления сессии, а не востанавливаются вкладки. В случае, если произойдет сбой, то после рестарта браузера ничего не случится, а так…
                0
                хм, логично. Чего-то я сам сразу не догадался.
                  0
                  Думаю, зря волнуетесь, так как такой flush настроек делается каждый раз, когда вы что-то меняете на вкладке about:config, о чем я и написал. Попробуйте найдите любой параметр типа boolean и покликайте на нем дважды. Вы ощутите задержки при изменениях значения — это и есть процесс записи в файл. Убедиться можно, посмотрев на дату модификации prefs.js
                    0
                    Я не проверял, а поверил на слово. Но если так — то имело бы смысл сделать встроенный flush несохранённых параметров по таймеру.
                      0
                      Именно поэтому и был создан топик…
                        0
                        Точно, чего-то я запутался и начал тупить.
                        Создайте тогда кто-нибудь баг в багзилле, чтоль.
                          +1
                          Но это не баг Firefox. Никто не мешает расширениям делать такой флуш, когда закрывают окно их настроек. Но вот не делают, и мы имеем потерю данных. Но это не вина браузера. Firefox при закрытии окна своих настроек делает же такое сохранение.
        0
        Ваши падения FF — ничто по сравнению с теми временами, когда мой FF 3.4-6 падал при каждом его запуске :-) С приходом FF 4 я более не страдаю и все прекрасно.
          +3
          «как бы Microsoft не рекомендовал, я никогда не буду хранить данные своих программ в реестре, а только в родной папке»

          Насколько мне известно, МС давно уже не рекомендует хранить данные приложений в реестре. Впрочем, хранение в родной папке тоже не приведет ни к чему хорошему. По идее:

          — Общие данные (для всех пользователей) должны лежать в ProgramData.
          — Пользовательские данные — в Users\\AppData.
            0
            Да, спасибо, что поправили. Так и должно быть.
            Я только вот думаю, может при инсталляции давать выбор, хранить пользовательские данные в Users\AppData (если будет несколько пользователей), или всё же в папке с программой (полная портабельность, если известно, что пользователь будет только один).
            Но это уже совсем другая тема :)
              +1
              Даже если только один, кто вам даст писать в Program Files?
                0
                Да, есть и такая проблема…
                  –2
                  а если у юзера права админа? Ему тоже не дадут туда писать?
                    +8
                    у юзера не должно быть прав админа
                      –7
                      у юзера не должно быть прав админа.
                      у юзера не должно быть прав.
                      юзера не должно быть.
                      0
                      Если юзер только один, и если он админ, и если у него отключен UAC, то можно.
                      Многовато «еслей» получается имхо
                        0
                        у многих сейчас персональный компьютер — персональный. Многие из этих юзеров — продвинутые. Многие продвинутые юзеры сидят под админом. (А многие из них ещё и не используют UAC (который, кстати, можно и не отключать)).
                          +2
                          Продвинутые юзеры не сидят под админом.
                            0
                            и еще UAC таки придутся отключить, чтобы это работало
                  0
                  У меня перемещаемый профиль, и после каждого перемещения 1 дополнение всегда отваливается. Приходится жать «проверить обновления», после чего устанавливается «дополнение совместимости», и необходима перезагрузка. Очень раздражает каждый день это делать. Куда копать не знаю. подскажите?
                    0
                    Отваливается всегда одно и то же дополнение? Если да, то стоит его озвучить, и скорее всего копаться в нем, либо найти замену.
                      0
                      Да, сейчас отваливается только 1. EasyDrag&go. Но это не проблема аддона. В старом профиле таких было 5. Создал новый профиль — 3. В текущем — проблемное только одно, и не сильно критичное (но совсем удалять тоже не хочется). Пробовал пересоздавать — лучше не получается.
                      Проблема имено в перемещении.
                      Вопрос больше в том, есть ли лог у FF, где можно посмотреть почему оно отваливается, в чем заключается установка «дополнения совместимости».
                    0
                    у меня вот так chrome все данные похерил, когда надолго вырубился свет, а я не успел подойти к компу, пока работал UPS. ладно, синхронизация есть, но все расширения пришлось настраивать заново, жаль, не умеет и настройки расширений синхронизировать. надо будет тоже поискать, больше не хочется зависеть от капризов электричества или софта.
                      0
                      а что мешало подключить упс к компу и настроить автовыключение?
                        0
                        упс и был подключен, я же написал. автовыключение не было настроено, да. но у нас если и есть проблемы со светом, то это небольшие скачки/отключения на пару секунд или на пару минут. упса хватает на 15 минут. но тут ситуация была немного другая, упс умер уже секунд через 30. никак не успел бы, аха?
                        +1
                        У меня вот так тоже было 27 декабря надо было ехать домой в другой город, а свечи залило, на улице -40, аккумулятор сел.
                        Тоже больше не хочется зависеть от капризов электричества.
                        0
                        У firefox вообще много проблем с устойчивостью к сбоям. Например, хранение закладок и истории не в plaintext, а в базе sqlite приводит к тому, что после особенно удачных падений они становятся недоступны. Вернуть их к жизни штатными средствами браузера уже нельзя, только копаться вручную в папке профиля.
                          0
                          Ой да ладно выдумывать. Последние версии лисы — максимально устойчивы к потере информации при крэше — он даже все вкладки по группам в том же виде восстанавливает, если включено восстановление сессии при старте браузера.
                          А про закладки — так вообще бред — в папке профиля есть папка bookmarkbackups в которой хранятся бэкапы закладок.
                            0
                            + Firefox Sync :)
                              0
                              он уже встроен, нет надобности его перечислять, теперь — это уже само собой разумеющееся :)
                                0
                                поправка: встроен в дев-ветку, как там дела в 3.6 и более ранних версиях — я не знаю.
                                  0
                                  аддон ставится на 3.6
                          +3
                          Textarea Cache — незаменимо не только при падениях: всё, что вы вводили в textarea на страницах — он запоминает, и в случае чего (например, случайное переключение на другую страницу, или обновление страницы по таймеру) — можно восстановить.
                            0
                            Спасибо. Очень полезное дополнение к теме.
                              0
                              огромное спасибо, то чего мне сильно не хватало, но даже как-то не приходило в голову поискать в расширениях…
                              0
                              Подскажите, а при каких условиях сохраняется перечень открытых в данный момент вкладок? Неоднократно терял их при различных условиях. Например, после выключения света не всегда возникает предложение восстановить сессию. Также они теряются, если открыто несколько окон Firefox, и последним закрываем какое-нибудь ненужное (например, список загрузок), а все основные вкладки были в другом окне, закрытом ранее.

                              Можно ли их тоже сохранять раз в n минут автоматически как-либо?
                                0
                                Выше уже писали: «все вкладки по группам в том же виде восстанавливает, если включено восстановление сессии при старте браузера».
                                Также, опции восстановления вкладок есть в расширениях Tab Mix Plus и Session Manager.
                                0
                                https://addons.mozilla.org/ru/firefox/addon/2410/ — Xmarks Sync — Если он у Вас стоит — то поставьте галочку — синхронить ективтабс.
                                https://addons.mozilla.org/ru/firefox/addon/1122/ — Tab Mix Plus — На тот случай, если нет хмаркса. Отлично восстанавливает даже после 10 минутного циркового представления Киев-энерго.
                                https://addons.mozilla.org/ru/firefox/addon/11778/ — Siphon — синхрон дополнений. БЕЗ НАСТРОЕК.
                                https://addons.mozilla.org/ru/firefox/addon/2109/ — FEBE — ну и главная хрень — бекапит что угодно/куда угодно/когда угодно. Сессии правда не восстанавливает. Зато и без этого умеет многое.

                                Но конечно круто, когда Вы решили сделать свое и под себя.
                                  0
                                  Xmarks уже сказали, что они закрываются, осталось меньше года, пока оно ещё будет работать.
                                  Tab Mix Plus — огромный комбайн. Если нужно всего лишь восстановление сессий — то лучше использовать Session Manager.
                                  Если уж советуете FEBE, то вместо Siphon лучше уж использовать CLEO + OPIE (от Чака Бейкера, автора FEBE), что позволит сохранять-восстанавливать даже настройки у дополнений. Но обычно эти 3 дополнения используются при миграции с профиля на профиль, а не в повседневной работе. Хотя — может кому-то и охота постоянно сейвиться таким образом.
                                    0
                                    Febe уже использует функции клео. Там галочка есть — все в один xpi.
                                    Тоже с opie.

                                    Ну у меня все проще — фебе работает с дропбоксом — все что делает — сразу синхронится )
                                    Очень удобно — с работы пришел — дома те же настройки. Открыл ноут — тоже самое.
                                      0
                                      Хм, а вот идея совмещения с веб-синхронизатором — хороша.
                                      Кстати, поставил я себе недавно дропбокс и не нашёл в нём необходимых функций для управления синхронизацией: как сделать так, чтобы заливание/скачивание происходило только по моей команде? Можно ли синкать только часть залитого?
                                        0
                                        Вроде бы нет.
                                        вот нашел статью по Вашему вопросу — www.diary.ru/~darehitorimo/p79668505.htm
                                  –5
                                    0
                                    Ребята, вы такие страсти рассказываете. У меня FF 3.6.10 с 95-ю расширениями. Падает крайне редко — а если и падает, то не теряет ни настроек, ни списка открытых вкладок (коих иногда бывает несколько десятков). Безусловно — упомянутые выше камрадом Xarakternik аддоны стоят и работают — так что возможно они и спасают.

                                    Но тем не менее — если у Вас так часты вылеты, то возможно стоит разобраться со списком аддонов и вычистить ненужные и/или конфликутющие?
                                      0
                                      95 (девяносто пять) расширений?!!!

                                      Ёлки-палки, что же там у вас такое стоит?

                                  Only users with full accounts can post comments. Log in, please.