S.T.A.R.T.E.R : Что "под капотом"
Пояснения по особенностям работы и инструкция по настройкам расширения "S.T.A.R.T.E.R : Не замерзай-ка!". Некоторые технические подробности по разработке и особенности применения аддона. В этой статье:
Скажу сразу – чтение материала этой статьи предполагает определённый уровень вашей подготовки (или, как минимум, желание разобраться в сути работы аддона), поэтому постарайтесь подойти к изучению изложенного с должным вниманием, это позволит обеспечить корректную работу расширения в вашем браузере и задать правильные настройки именно под ваши задачи. Особенности работы "Незамерзайки" на разных версия браузеровОсновной задачей аддона является автоматическая активация всех открытых вкладок и удержания этого состояния до их закрытия. При этом запрещается срабатывание штатной функции браузера, выгружающей неактивные фоновые вкладки из памяти после определённого времени (autoDiscard). С учётом того, что сама функция "tab-discard" была добавлена в Chromium-браузеры только с версии CR‑46, применение расширения на более старых версиях не имеет никакого смысла, так как в них в принципе отсутствует какое‑либо управление выгрузкой фоновых вкладок. В манифесте установлено именно это ограничение по версии. Кроме того, и в версиях CR‑46+ есть отличия в работе этой функции, связанные с изменениями в более новых билдах. В частности, полноценное управление автовыгрузкой вкладок с помощью расширений доступно только в версиях CR‑54+, начиная с которой можно проверять текущее состояние и/или изменять флаг "autoDiscarding" у любой вкладки. Для лучшего понимания "всей этой кухни" вы можете самостоятельно ознакомиться с некоторыми статьями на эту тему. К вопросу "нафига мне эта теория" – желательно, чтобы вы хотя бы в общих чертах представляли себе, что и как работает в "Незамерзайке", чтобы не возникли какие‑нибудь сложности в работе и чтобы вы могли осознанно настраивать и применять это расширение. …а также чтобы не было никаких "предъяв аффтару" если вдруг у вас что-то "просто тупо не алё"… :)) Итак, на основании сказанного выше должно быть понятно, что S.T.A.R.T.E.R немного по-разному работает на версиях CR‑46‑53 и на CR‑54+, хотя и в итоге выполняет заявленную задачу активации на любой версии. На версиях CR‑54+ аддон проверяет состояние каждой вкладки по флагу "discarded" и, в зависимости от заданных настроек, может сразу же установить для любой вкладки и флаг запрета автовыгрузки. Этот запрет сохраняется до момента закрытия вкладки и не меняется при переходах в ней или при её обновлении. На версиях CR‑46‑53 аддон может проверить текущее состояние вкладки только с помощью специального "костыля" (по косвенным параметрам вкладки), поскольку эти версии штатно не поддерживают проверку флага "discarded". По той же причине в этих версиях НЕ может быть установлен и флаг "autoDiscarding", запрещающий автоматическую выгрузку вкладок браузером. Поэтому и не сто́ит здесь "ожидать чудес", если вам действительно необходимо абсолютно надёжное удержание вкладок в активном состоянии – на старых браузерах лучше использовать другие методы для этого, хотя и у них тоже есть определённые "минусы"… Сам процесс активации вкладки не зависит от версии браузера и, формально, делает то же самое, что и при ручном переходе на неактивную (выгруженную из памяти) вкладку – то есть просто перезагружает её. Момент запуска и другие параметры активации также не зависят от версии браузера и определяются только вашими настройками. По умолчанию "Незамерзайка" однократно срабатывает при запуске браузера и в дальнейшем не влияет на сёрфинг. Кроме того, на версиях CR‑54+ расширение автоматически выставляет флаг запрета автовыгрузки для всех вкладок, прошедших процедуру активации (по умолчанию, можно изменить в Настройках и затем проверить работоспособность). Индикация текущего состояния вкладок и переключение режима работыДля быстрой оценки текущего состояния каждой из открытых вкладок применяется индикация в виде изменения значка расширения на тулбаре. При этом меняется и подсказка к иконке, где будет указан текущий режим работы вкладки. В общем случае внешний вид значка соответствует иконке "Незамерзайки" по умолчанию (синий цвет). Подсказка зависит от версии вашего браузера и указывает на действие по умолчанию при щелчке по значку на тулбаре. На версиях CR‑54+ значок по умолчанию выглядит так:
На версиях CR‑46‑53 значок по умолчанию выглядит так:
В браузерах версий CR‑54+ после срабатывании функции Активатора вкладок И при условии включения в настройках опции "Не выгружать активированные" ИЛИ при ручном переключении режима работы вкладки кнопка тулбара на обработанных вкладках блокируется, все действия будут доступны только через её контекстное меню или по горячим клавишам (соответствующие пункты меню действий отображаются только для этих версий). Это сделано для защиты конкретных вкладок от случайного переключения режима и снятия флага запрета автовыгрузки. Соответственно меняется и сам значок на тулбаре (серый цвет) и подсказка к для него:
В браузерах версий CR‑54+ режим защиты всех вкладок от автовыгрузки можно включить пакетным действием, выбрав в контекстном меню пункт "Не выгружать все текущие") или горячей клавишей (по умолчанию ALT+SHIFT+U). При этом кнопка тулбара на всех открытых вкладках блокируется, все действия для них будут доступны только через контекстное меню или по горячим клавишам. Обратное переключение режима активности и снятие запрета автовыгрузки в браузерах версий CR‑54+ выполняется только из меню (пункт "Переключить режим вкладки") или горячей клавишей (по умолчанию ALT+SHIFT+T). В браузерах версий CR‑46‑53 после срабатывании функции Активатора вкладок кнопка тулбара на вкладках в любом случае НЕ блокируется и текст подсказки не меняется, повторный запуск Активатора будет всегда доступен на любой вкладке. Это сделано чисто для удобства работы, разница в управлении (с более новыми версиями браузеров) через щелчок по кнопке тулбара обусловлена разницей в доступных методах управления вкладками. В дополнение к общему методу защиты от автовыгрузки в S.T.A.R.T.E.R'е добавлен ещё и специальный режим "ручного управления", запрещающий автоматическую проверку и обработку определённых вкладок при запуске процесса пакетной активации. При этом для вкладки отключается звук и устанавливается состояние "закреплена". В дальнейшем, по этим двум параметрам (и только по ним, в паре) Активатор исключает такие вкладки из пакетной обработки. Кроме того, в браузерах версий CR‑54+ для вкладки автоматически устанавливается и флаг запрета автовыгрузки, но его снятие* вручную через меню или хоткей не приводит к отключению "ручного" режима. * В этом случае неактивная вкладка может быть автоматически выгружена браузером из памяти, но уже НЕ будет перезагружена при запуске пакетной процедуры активации фоновых вкладок. То есть это исключение вкладки из обработки именно расширением, но не браузером! При включении режима "ручного управления" кнопка на тулбаре для этой вкладки также блокируется, но, как и в случае с режимом запрета автовыгрузки, остаётся доступным управление через контекстное меню и по горячим клавишам. При переключении режима "ручного управления" меняется значок на тулбаре (красный цвет) и подсказка к для него. В браузерах CR‑54+, для включенного ручного режима и включенного запрета на автовыгрузку, иконка выглядит так:
В браузерах CR‑54+, для включенного ручного режима при отсутствии запрета на автовыгрузку, иконка выглядит так:
В браузерах CR‑46‑53, в силу невозможности управления автовыгрузкой, иконка выглядит так:
Отключить ручной режим можно выбором пункта меню "Вкладка: Ручное управление" или горячей клавишей (по умолчанию ALT+SHIFT+M), при этом звук остаётся выключенным, но вкладка становится незакреплённой. В браузерах версий CR‑46‑53 при этом кнопка на тулбаре для этой вкладки всегда разблокируется, а состояние иконки меняется на состояние по умолчанию (синий цвет и подсказка действия по умолчанию). В браузерах версий CR‑54+ состояние кнопки и иконки меняется в зависимости от установленного флага запрета автовыгрузки – если он включен, задействуется стандартный режим защиты от автовыгрузки (серая заблокированная кнопка), если был выключен – вкладка будет обычной, незащищённой (синий цвет, подсказка с действием по умолчанию, кнопка разблокирована). Также можно отключить режим "ручного управления" штатными средствами браузера, выбрав в меню вкладки (ПКМ на ярлыке) пункты "Включение звука на вкладке" или "Открепить вкладку". При этом состояние иконки не изменяется (в силу невозможности со стороны аддона отследить это ручное действие), но вкладка теперь не является исключением для аддона и может* подпадать под условия для автоматической активации (перезагрузки). * Чтобы исключить возможные несоответствия, не ломайте логику работы аддона ручными действиями и отключайте "ручное управление" только через меню или горячие клавиши самого расширения. Кроме вышеперечисленных режимов, в коде аддона установлены жёстко зашитые ограничения на работу с отдельными "огороженными" служебными страницами, которые могут встречаться в некоторых браузерах. Доступ к свойствам вкладок на таких страницах запрещён разработчиками этих браузеров и не может быть изменён. Примером подобного ограничения служит страница chrome://myextensions в браузерах семейства 360 Extreme Explorer (все линейки). Для "огороженных" служебных страниц автоматически выставляется исключение, любые действия к ним неприменимы. Обнаружение этих страниц происходит либо автоматически, при работе Активатора вкладок, либо при попытке вручную выполнить любое из действий, связанных с изменением режима текущей страницы. При этом значок иконки и подсказка также меняются (красный цвет и специальная подсказка):
Кнопка на тулбаре для этих вкладок автоматически блокируется, меню и горячие клавиши пакетных действий остаются доступными. Во избежание ошибок любая попытка выполнения вручную действий, связанных со вкладкой, будет "молча" проигнорирована. Краткий итог: в любом случае будет доступно управление аддоном и выполнение всех действий и настроек через контекстное меню кнопки на тулбаре, использование дублирующих действия горячих клавиш зависит от состояния опции "Использовать горячие клавиши" (включена по умолчанию). На этом по индикации и переключениям режимов всё, далее рассмотрим Настройки Активатора. Настройка расширения и выполнение пакетных и одиночных действийСогласно принятой концепции управления, все доступные действия и настройки можно выполнить в контекстном меню кнопки аддона на тулбаре. Вызов наиболее часто применяемых действий продублирован горячими клавишами. Доступ к контекстному меню кнопки на тулбаре производится щелчком ПКМ по этой кнопке:
Ниже описаны все действия и настройки, доступные в этом меню, приведены их названия для русского и английского интерфейса, а также указаны дублирующие горячие клавиши. ДействияПереключить режим вкладки (Switch tab freeze mode): Вкладка: Ручное управление (Switch tab control mode): Не выгружать все текущие (Don't freeze all tabs): Разбудить их всех! (Wake up 'em all!): Оценить общую обстановку (View discard situation): Switch interface language to ENGLISH (Переключить язык на РУССКИЙ): Сбросить настройки и перезапустить (Reset to defaults then reload): Перезапустить и обновить (Reload and update): STARTER: Что "под капотом" (STARTER: Online Help and FAQ): НастройкиЗапускать при старте браузера (Activate tabs on browser startup): * Актуально, если используется настройка "Загружать последние открытые страницы" (восстановление при запуске браузера всех страниц, открытых на момент завершения последнего сеанса работы). В частности, в версиях CR78+ число автоматически активируемых при старте вкладок не превышает 3, независимо от необходимости их загрузки по сети. При этом неактивными могут быть также и локальные страницы и вкладки со служебными страницами самого браузера. Активировать служебные страницы (Activate browser service pages): Закреплённые вкладки только вручную (Ignore pinned tabs autoactivation): Не выгружать активированные (AutoDiscards OFF for activated): Не выгружать новые вкладки (AutoDiscards OFF for new tabs): Автоактивируемых вкладок: до … (AutoUndiscardable tabs: up to …): Таймаут при первом запуске, мс: 1000 (Browser startup timeout, ms: 1000): Таймаут групповых операций, мс: 1000 (Group operation timeout, ms: 1000): Настроить шаблон активации (Set tab activation template): Использовать быструю выгрузку (Fire and exit : Use fast unload): Использовать горячие клавиши (Allow and use hotkeys): Оценка состояния вкладок и проверка работоспособности расширенияПомимо автоматического запуска при старте браузера, вы можете вручную запустить процесс активации фоновых вкладок в любой момент времени, выбрав в контекстном меню действий пункт "Разбудить их всех! :)" или нажав соответствующую горячую клавишу (по умолчанию ALT+SHIFT+A). В браузерах версий CR‑46‑53 этот процесс запускается так же и по щелчку на кнопке аддона на тулбаре. В браузерах версий CR‑54+ щелчок по этой кнопке не запускает процесс активации, а приводит к включению запрета автоматической выгрузки только для текущей вкладки. Это различие сделано чисто для удобства работы и обусловлено разницей в доступных методах управления вкладками (соответственно меняется и подсказка к кнопке). Как уже сказано, после включения защитного режима конкретной вкладки кнопка на тулбаре для неё блокируется. Обратное переключение режима активности и снятие запрета автовыгрузки в браузерах версий CR‑54+ выполняется только из меню (пункт "Переключить режим вкладки") или горячей клавишей (по умолчанию ALT+SHIFT+T). Результат работы функции активации можно увидеть на служебной странице chrome://discards:
Совет: для быстрого доступа к этой служебной странице браузера вы можете использовать пункт меню расширения "Оценить общую обстановку" (или "View discard situation" в англоязычном меню). На скриншоте выше показан пример этой страницы в браузерах версий CR‑54+ при включении в настройках опции "Не выгружать активированные" (включена по умолчанию, отображено состояние после отработки Активатора). В нашем случае интересует состояние параметров в столбцах: В столбце "Visibility" отображается текущая активная (видимая) страница (для всех фоновых там указано "hidden"). Во всех современных браузерах эта страница обновляется автоматически, результат вызова соответствующих функций "Незамерзайки" будет виден в таблице сразу же. В старых* браузерах для просмотра текущего состояния вкладок потребуется обновить страницу вручную. * В них указанная служебная страница, фактически, не отражает работу аддона, а только показывает текущее состояние вкладок, что может быть использовано в информационных целях. Эту же служебную страницу можно использовать для ручной выгрузки отдельных фоновых страниц (кнопки "Discard" в конце каждой строки) с целью проверки работоспособности нашего Активатора – выгрузили, запустили Активатор (или просто попереключали режим работы вкладок) и посмотрели изменение состояния выгруженных вручную. Альтернативные методы активации фоновых вкладокФункция автовыгрузки неактивных вкладок самим браузером (autoDiscard) может быть крайне нежелательна в случаях, если вам необходимо поддерживать непрерывную активность фоновых вкладок. С учётом современной тенденции на минимизацию расхода памяти браузерами со стороны разработчиков браузеров, задача отключения автовыгрузки может быть для вас достаточно важной. В этой части статьи рассмотрены некоторые методы (полу)автоматической активации фоновых вкладок, не требующие установки расширений. Оставив за скобками вопрос удобства, следует отметить, что эти методы можно применять на большинстве браузеров, поддерживающих функцию автовыгрузки неактивных вкладок (CR‑46+). Наиболее простым (и самым неудобным) является периодический "ручной пробег" по всем открытым вкладкам, при этом браузер сбрасывает таймер неактивности и ваши вкладки (какое-то время) будут оставаться активными в фоне. Реализация этого метода может отличаться в зависимости от конкретного используемого браузера, но общая суть всех вариаций одинакова – нужно просто периодически вручную "пошевеливать" все открытые вкладки. В частности, в любом браузере вы можете просто зажать клавиши CTRL+Tab, что приведёт к желаемому "пробегу по кругу" в пределах вкладок активного окна. Кроме того, в некоторых браузерах, поддерживающих переход по вкладкам за счёт прокрутки колеса мыши над панелью вкладок, можно сделать тот же самый "контрол‑таб" и с помощью мыши. Ещё один аналогичный способ "шевеления", который может быть применён в современных браузерах – можно просто провести мышью над панелью вкладок, чтобы под курсором начали отображаться миниатюры вкладок. При этом не нужно дожидаться загрузки каждой миниатюры, достаточно именно "шевельнуть спящих", чтобы они начали загружаться. Отмечу, что этот вариант применим только при поддержке браузером такой функции (в частности, следует проверить наличие флагов chrome://flags/#tab-hover-cards и chrome://flags/#tab-hover-card-images и включить их). Если же вам необходимо поддерживать активность фоновых вкладок в любом случае, но вы не можете гарантировать постоянного ручного активирования таких страниц, предыдущие "полуавтоматические" средства вам не подойдут. Задача удержания активности всех фоновых вкладок без исключения может быть решена путём использования флагов в настройках или соответствующих ключей командной строки, принудительно отключающих функцию автовыгрузки. Для решения нашей задачи можно попробовать найти* и ВЫКЛючить следующие флаги: * Могут отличаться в зависимости от версии вашего браузера, а могут и вообще в ней отсутствовать – из-за постоянного удаления разработчиками различных полезных функций, нет никакой гарантии, что эти ключи или флаги будут доступны в вашем браузере. Да, всё это нудно и требует времени, но зато не нужно ничего ставить и настраивать. Однако, самое "неинтересное" в перечисленных методах это то, что можно просто забыть их выполнить и вот уже "они все уснули"… В общем, лично я не стал бы "экономить на спичках" и просто настроил бы "Незамерзайку" под себя… :) Известные проблемы и способы их решения
Исходный код, интерфейс и задействованные APIКод использует только чистый JS (ES5), в нём отсутствуют функции, неподдерживаемые в "старых" браузерах. В отличие от аналогов, "S.T.A.R.T.E.R" работает только в момент вызова конкретных функций, не потребляя ресурсы браузера в покое. Кроме того, по умолчанию задействуется и функция "быстрой выгрузки", значительно сокращающая общее время активности расширения. Отдельной страницы настроек нет (и не будет), все опции доступны через вложенное меню "Настройки Активатора Вкладок" (на скриншоте выше). Назначение параметров интуитивно понятно из их названия, во всех диалогах имеется достаточно подробная подсказка. Все настройки сохраняются только локально, синхронизация не поддерживается. Основным API, используемым для управления вкладками и выполнения бо́льшей части функций, является chrome.tabs, который обеспечивает работу Активатора вкладок и отвечает за установку различных режимов работы. Также в манифесте запрашивается разрешение activeTab, упрощающее отдельные действия на текущих страницах. Кроме автоматического управления активацией вкладок через фоновый скрипт, вызов действий вручную возможен по щелчку по кнопке на тулбаре, из контекстного меню этой кнопки или с помощью горячих клавиш. Для работы с этими функциями применяются, соответственно, API chrome.browserAction, chrome.contextMenus и chrome.commands. Горячие клавиши полностью дублируют соответствующие пункты контекстного меню, можно использовать до 4‑х комбинаций для выполнения основных действий (количество хоткеев ограничено только пределом, установленным требованиями API). Для хранения пользовательских настроек используется API chrome.storage. В текущей версии расширения в манифесте не требуется разрешение [ " Для обеспечения работы аддона с любыми вкладками, включая локальные страницы и служебные страницы браузера и других расширений, в манифесте запрашиваются разрешения [ "*://*/*", "<all_urls>" ]. Расширение имеет двуязычный интерфейс на русском и английском (жёстко зашиты в коде). Кроме автоматического определения языка по настройкам браузера, есть возможность его ручного переключения в меню настроек. "S.T.A.R.T.E.R" не имеет практических ограничений по коду и API, может работать в любых браузерах версий 46+. В манифесте установлено ограничение на версию (46+), но оно не связано с исходным кодом и обусловлено только абсолютной нецелесообразностью применения "Незамерзайки" на более старых версиях. Полностью весь функционал аддона доступен только на браузерах версий 54+. Связано с ограничениями API управления вкладками (часть функций не поддерживается в старых браузерах) и с недоступностью прямого управления автовыгрузкой неактивных вкладок в версиях CR‑46‑53. Исходный код НЕ обфусцирован, исключительно для удобства при возможных доработках и облегчения читаемости кода при его исследовании. Если кому-то это критично – удалите комментарии и пропустите через компрессоры.) Ссылки для интересующихся
| ||||||||||
Технические детали
Общие технические сведения о разработке
|
Всего комментариев: 1 |
0
|