' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'')//-->
Для "продвинутых" пользователей, желающих знать технические подробности расширения Imageless • RU.
В этой статье:
Весь заявленный функционал доступен полностью только в версиях браузеров 49+.
В старых версиях (25-48) нет дублирования функций контекстного меню страницы в меню кнопки тулбара. Ограничение связано с отсутствием в этих версиях поддержки части API контекстного меню.
В старых версиях браузеров (25-48) к настройкам расширения доступа* нет. Это ограничение также связано с отсутствием в этих версиях поддержки части API контекстного меню.
* Продвинутые юзеры могут (на свой страх и риск) изменять настройки даже в самых старых версиях – путём правки вручную соответствующих ключей в localStorage аддона…)
В старых версиях (25-48) настройки жёстко ограничены следующими:
Использование горячих клавиш ограничено – работают только в версиях 25+ (в манифесте не задано).
Базовая версия Imageless (2017.11.22) может использоваться в любых браузерах до версии 72. В более свежих версиях следует использовать "подправленный" билд (2020.3.12), в котором устранена проблема работы с хоткеями (проявляется только в 72+). Других отличий между этими версиями нет.
В исходном коде использует только чистый JS (ES5), неподдерживаемые в "старых" браузерах функции отсутствуют.
Скрипт работает в "строгом" режиме – для гарантированного выполнения функций и облегчения отлова ошибок.
Аддон работает постоянно, выгрузки из памяти нет. Это связано с особенностью работы основного API блокировки, используемого в аддоне – chrome.webRequest и его "блокирующей" части webRequestBlocking.
Эти API отвечают непосредственно за проверку http-запросов и блокировку загрузки изображений по mime‑типу [image] и задействуются при выборе соответствующего метода блокировки – будут работать только при включении настройки "Блокировка WebRequest". Для обеспечения корректной работы аддона с любыми протоколами в манифесте запрашивается разрешение [ "<all_urls>" ].
Для управления блокировкой загрузки изображений по типу контента (на уровне настроек браузера) применяется API chrome.contentSettings. Управление блокировками по типу контента перекрывает соответствующую часть настроек браузера (chrome://settings/content), но не ограничивает пользователя в возможности задания исключений для отдельных сайтов ("белый список").
Для выполнения инжекции микро-скрипта переключения вывода изображений и контекстных действий на веб-страницах задействуются два API – chrome.tabs и chrome.contextMenus. Также применяется разрешение activeTab, упрощающее отдельные контекстные действия на текущих страницах.
API контекстного меню также применяется во всех браузерах версий 49+ для доступа к настройкам расширения при щелчке ПКМ по значку на тулбаре. Ввиду отсутствия поддержки части типов этого API в более старых версиях (25-48) контекстное меню для кнопки на тулбаре отсутствует, настройки заданы жёстко и не меняются. Это сделано в целях упрощения интерфейса и в силу достаточно редкой потребности менять "дефольтные" параметры в старых браузерах.
Для переключения индикатора состояния режима блокировки (бэджик, ON/OFF) применяется API chrome.browserAction.
Для вызова функций по горячим клавишам используется API chrome.commands.
Для текущего хранения настроек используется API chrome.storage.
Аддон не имеет практических ограничений* по версии браузера, используемые API работают в версиях 25+.
* В манифесте ограничение "снизу" не установлено, оно связано только с вызовом функций по хоткеям (этот API не работает в более старых версиях). В принципе, это особо не ограничивает пользователя – если не задействовать хоткеи и управлять аддоном только через контекстное меню и кнопку тулбара…
Исходный код НЕ обфусцирован, исключительно с целью удобства при возможных доработках и для облегчения читаемости кода при его исследовании.
Если кому‑то это критично – удалите комментарии и пропустите через компрессоры…)