Экспериментальное API для редактирования about:config из WebExtensions
Реализован экспериментальный API для предоставления в WebExtensions возможности редактирования настроек, доступных через «about: config», в браузерах, основанных на Firefox. Для получения доступа к API необходимо выполнение следующих условий:
- Использование версии Firefox с возможностью запуска неподписанных расширений (Mozilla принципиально не подписывает расширения, использующие WebExtensions Experiments) и активация данного режима через «xpinstall.signatures.required»;
- Использование версии Firefox с возможностью использования WebExtensions Experiments (требует сборки с макроопределением «MOZ_DEV_EDITION». Из официальных версий таковыми являются Nightly и Developer Edition). Активация данного режима производится через «extensions.experiments.enabled»;
- Наличие установленного расширения, пробрасывающего API. Оно находится в каталоге «experiment». Там же находится файл, описывающий и документирующий текущую версию API WebExtensions для редактирования «about: config». В будущем планируется реализовать ограничение параметров, доступных конкретному расширению-пользователю API, путём декларирования их в манифесте.
Для работы с API требуется указать в манифесте своего расширения разрешение «experiments.config». Обращаем внимание, что динамическая выдача (с возможностью для пользователя отказаться от выдачи) разрешений на доступ к экспериментальным API на данный момент в Firefox не работает.
API может быть полезен для создания расширений-твикеров, предоставляющих более дружественный пользователю интерфейс настройки браузера (вплоть до «установил и забыл»). В том же репозитории поставляются 2 расширения, использующие проброшенное API, которые могут служить примерами.
В директории «arkenfox» поставляется расширение, синхронизирующее настройки браузера со списком рекомендуемых настроек проекта arkenfox (ранее известного как ghacksuserjs, но переименованного, так как проект долгое время развивался в отрыве от сайта Ghacks technology news) При установке на панели инструментов появляется кнопка, при нажатии на которую открывается список настроек, значения которых не совпадают со значениями в arkenfox/user.js. Напротив каждого различия присутствует кнопка, по нажатию на которую различие устраняется. Имеется возможность устранить все различия одним нажатием.
Для работы расширения из директории «arkenfox» необходимо другое экспериментальное API, webext-experiment-parse. Оно позволяет использовать ресурсы встроенного в SpiderMonkey парсера ECMAScript, вместо использования парсеров, реализованных на самом ECMAScript, таких как ESPrima, что призвано обеспечить лучшую производительность, а главное — избавиться от необходимости поставлять и обновлять эту зависимость. Измерение и сравнение не производилось, вполне возможно, что накладные расходы на пересылку сообщений всё съедают, по-хорошему чтобы не съёдало нужно пробросить это из коробки, но на данный момент Mozilla вообще против проброса этого API, так как стабильность формата возвращаемого AST они не гарантируют. Тем не менее, предусмотрена возможность работы без указанного расширения, с откатом на примитивный парсер на основе регулярных выражений. Для этого требуется пересобрать расширение «arkenfox», убрав из манифеста разрешение «experiments.parse».
Расширение «unlocker» просто разблокирует все заблокированные настройки в момент его инициализации. Заблокированные настройки — это те, что пользователь не может изменить через «about: config». Так как файл пользовательских настроек считывается при запуске до инициализации расширений, изменение заблокированных настроек между перезапусками не сохраняется. В случае необходимости «перебить» значение заблокированной настройки на ранних этапах запуска, можно заблокировать его в другое значение по инструкции.
Для сборки расширений необходимо просто заархивировать их файлы в zip-архивы без сжатия с расширением xpi. Напоминаем, что редактирование настроек about: config было намеренно не реализовано Mozillа в виде API WebExtensions.
Источник: http://www.opennet.ru/opennews/art.shtml? num=54188
© OpenNet