' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'')//-->
В этой статье достаточно упрощённо, "на пальцах", рассказано об основных технических особенностях построения расширения ExtMan RU. Почему "на пальцах" – да просто потому, что "профи" могут всё это увидеть самостоятельно в исходном коде аддона, поэтому и подача этого материала сделана не для них, а для "чисто конкретно интересующихся обычных граждан"…)
Итак, поехали…
Код использует только чистый JS (ES5), все неподдерживаемые в "старых" браузерах функции заменены на аналоги.
Все скрипты работают в "строгом" режиме – для гарантированного выполнения функций и облегчения отлова ошибок.
Расширение не запрашивает лишних разрешений, работает полностью автономно и не занимает память в покое.
Всё управление работой расширения осуществляется через попап-окно, вызываемое по щелчку на иконке на тулбаре. Для вызова окна попапа применяется API chrome.browserAction.
Окно можно открыть и в отдельной вкладке, по желанию – в закреплённой. Обе эти опции задаются в Настройках.
Интерфейс окна предельно прост и интуитивно понятен, для всех "кликабельных" элементов добавлены тултипы и подсказки. Текущая индикация работы расширения – через его значок на тулбаре (бэджик и подсказка значка).
Для облегчения освоения аддона добавлена подгружаемая Справка, описывающая основные возможности ExtMan'а, вызов – щелчок по красной звёздочке (★) в правом верхнем углу окна расширения.
Блок Настроек всех основных и дополнительных опций и функций, включая управление параметрами самого ExtMan'а, открывается в этом же окне, поверх списка установленных аддонов. В манифесте расширения отдельная страница настроек не указана – в связи с её отсутствием.)
Для отрисовки интерфейса попапа и страницы настроек не используются никакие сторонние JS/CSS библиотеки, весь интерфейс работает на чистом HTML с минимально необходимым набором стилей и скриптов. Язык интерфейса, сообщений, подсказок и описания – только русский (жёстко зашит в коде).
Расширение имеет модульную структуру скриптов, автозагружаемых по необходимости. Выгрузка модулей и очистка занимаемой ими памяти производится автоматически, по мере надобности (по завершению работы модуля). Это снижает общий текущий расход памяти и упрощает добавление новых функций.
Основные функции управления работой аддона и запуском отдельных модулей размещены в автовыгружаемом фоновом скрипте emstart.js.
Основные функции управления аддонами и запуска бо́льшей части сервисных функций размещены в скрипте extman.js, автоматически загружающемся при вызове окна расширения. Кроме управляющих функций этот скрипт содержит также все процедуры отрисовки интерфейса окна.
Основной API, используемый в аддоне – chrome.management, непосредственно отвечающий за управление всеми установленными дополнениями (расширениями, приложениями и темами), а также за проверку и отслеживание всех изменений этих дополнений. Другие разрешения в манифесте аддона не запрашиваются.
При установке/удалении или изменении состояния других аддонов выполняется опциональная запись о событии в лог и обновление бэджика и подсказки к значку ExtMan'а на тулбаре. С целью оптимизации работы браузера в код аддона добавлена функция ускоренной выгрузки фонового процесса из памяти после выполнения таких действий.
Для текущего хранения загруженных фильтров и подписок используется API chrome.storage, в манифесте аддона это разрешение не запрашивается в силу достаточности объёма по умолчанию для хранимых собственных настроек (менее 5Mb). Хранение настроек – только в локальном хранилище самого аддона, синхронизация не применяется.
Для открытия вкладок в браузере (например, стандарьной страницы chrome://extensions) применяется API chrome.tabs.
Аддон не имеет практических ограничений по версии браузера, все используемые API работают в версиях 22+ (версии ниже 22 не поддерживают часть используемых API). Неподдерживаемые в старых версиях функции управления автоматически отключаются во избежание ошибок.
Исходный код НЕ обфусцирован, исключительно с целью удобства при возможных доработках и для облегчения читаемости кода при его исследовании. Если это критично – удалите комментарии и пропустите через компрессоры.)