Switchmark • RU : Что "под капотом"

Бармалей 16.01.2017 13.03.2021 2700.0

Пояснения по особенностям работы расширения Switchmark • RU. Некоторые технические подробности по разработке и особенности применения аддона на различных версиях браузеров.

В этой статье:


Технические особенности и отличия от аналогов

Главные технические отличия расширения "Switchmark • RU" от прототипа заключаются в следующем:

  • Только русский интерфейс описания, настроек и меню, локализация "жёсткая", зашита прямо в коде.
  • Решена проблема исходного аддона, приводившая к некорректному переключению панелей.
  • Решена проблема потери части закладок при переключениях и последующий отказ в переключении.
  • Добавлена выгрузка из памяти в покое и быстрая выгрузка после переключения или выхода из настроек.
  • Модель хранения настроек изменена на локальную (и только для самого расширения, в localStorage).
  • Добавлен ряд автоматических проверок целостности структуры служебных папок расширения.

Для работы с закладками используются функции штатного Диспетчера закладок браузера. Процесс сохранения закладок не отличается от стандартных действий в браузере. Управление панелями, включая всю структуру пользовательских панелей и специальных папок для сохранения сессий, временных закладок и импортируемых ссылок, производится через специальную папку "Switchmark • RU", размещаемую внутри стандартной служебной папки "Другие закладки".

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

О функциональных отличиях расширения читаем в статье Switchmark • RU : Переключатель панели закладок.


Условия применения расширения в разных браузерах

Расширение Switchmark • RU может применяться на любых версиях любых браузеров. Универсальность обеспечена независимостью способов управления вкладками от особенностей кокретных версий, а также тем, что код скриптов аддона, фактически, является набором стандартных процедур, работающих независимо от функционала любого браузера на движке Chromium.

На браузерах версий 38+ аддон не имеет никаких ограничений, связанных со встроенным функционалом самого браузера, и может применяться безальтернативно для управления закладками.

В версиях браузеров до 38 возможна блокировка расширения браузером при превышении лимита операций записи.

Проблема не решается ни перезапуском браузера или расширения, ни штатной переустановкой "глюкнувшего" аддона. Самое неприятное – при этом ни браузер, ни расширение не выдают никаких ошибок, но аддон тупо не работает.

Причина "нерабочести" – ID аддона заносится в "чёрный список" (в файл QuotaManager в профиле пользователя).

Блокировка не зависит от какого-либо конкретного аддона, так как определена лимитами в самом браузере.

Согласно документации, предел* лимита составляет до 1 млн. операций в минуту или в час, установка более высоких значений этих параметров в самом расширении проблему не решает.

* В браузерах версий 38+ все эти ограничения полностью сняты разработчиками.

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

В частности, такая ситуация может возникнуть при переключении панелей с большим числом закладок, поскольку все действия по смене корневой папки Панели закладок производятся именно путём последовательной записи данных о каждой отдельной закладке.

Кроме того, это может произойти и при частом переключении панелей, по той же самой причине.

Есть и хорошая новость – даже если аддон заблокирован, это не приводит к потере или порче отдельных закладок, все они останутся неизменными в любом случае. Однако, если автоблокировка всё же сработала, вам придётся вручную проверять, что из закладок успело переместиться, а что – осталось на прежнем месте…

Думаю понятно, что наиболее простым способом решения проблемы автоблокировки расширения является отказ от его использования в браузерах версий до 38. Тем не менее, если по каким-то причинам вам приходится использовать старый браузер, существует несколько способов обхода указанных ограничений.

Подробнее об этих способах можно прочитать в статье Обход "закладочных" ограничений в Chromium.


Исходный код, интерфейс и задействованные API

В коде используется только чистый JavaScript (ES5), неподдерживаемые в "старых" браузерах функции отсутствуют.

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

На странице Настроек доступны функции экспорта и импорта закладок, параметры контекстного меню и сохранения сессий, проверка и управление структурой пользовательских панелей. В интерфейсе Настроек применяются стили стандарта CSS2, неподдерживаемые в "старых" браузерах директивы отсутствуют.

Элементами интерфейса управления являются кнопка расширения на тулбаре (включая дополнительное контекстное меню в браузерах версий 49+) и контекстное меню страницы. Функции этих элементов описаны в отдельной статье.

Для экспорта и импорта закладок применяется формат JSON, как наиболее универсальный с точки зрения обработки данных. При необходимости выгрузки (загрузки) закладок в формате HTML следует использовать возможности штатного Диспетчера закладок браузера.

Основным API, используемым для работы с закладками, является chrome.bookmarks, который также обеспечивает переключение панелей и поддержку структуры служебных папок расширения.

Для вызова штатного Диспетчера закладок браузера применяется API chrome.tabs.

Для вызова функций расширения через кнопку значка на тулбаре или из контекстного меню применяются, соответственно, API chrome.browserAction и chrome.contextMenus.

Для хранения пользовательских настроек используется API chrome.storage. В текущей версии расширения в манифесте не требуется разрешение [ "unlimitedStorage" ], размер данных не превышает ограничения по умолчанию (5Mb).

Расширение "Switchmark • RU" полностью русифицировано, для всех элементов интерфейса, сообщений и пунктов меню используется единственный язык – русский. Текстовые строки жёстко зашиты в код, другие языковые локализации не поддерживаются. Это сделано с целью упрощения кода расширения и для повышения его быстродействия в целом.

Аддон не имеет практических ограничений по версии браузера, используемые API могут работать в версиях 22+. Рекомендуемая версия браузера – 38+, связано с указанными выше ограничениями при работе с закладками.

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



Так держать! :)
Технические детали

Общие технические сведения о разработке
Статус разработки:Активная, поддерживается автором
Язык интерфейса:Русский
Версия браузера:22+ (рекомендуется 38+)
Протестировано в:SRWare Iron 31/36/49 + Chromium 53 + 360 Extreme Explorer 9/11 (CR-63/69) + Chromium 87
Технологии и API:Чистый JavaScript (ES5), API: browserAction, tabs, storage, bookmarks, contextMenus

URLПоделиться

Всего комментариев: 0
close