Так получилось, что за последние несколько дней 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
-
Смерть Ie6 Назначена На 13 Марта.
19 Oct, 24 -
Переезд Серверной Комнаты
19 Oct, 24 -
Интерактивные Доски. Зачем Они И Для Кого?
19 Oct, 24 -
Как Выбрать Поставщика Облачных Услуг?
19 Oct, 24