Extension rules что это
Расширения для Google Chrome, которые невозможно удалить или отключить
Уже сто раз обсуждали такую проблему, как установка непрошеных расширений сторонними программами. Отчасти ее уже решили в Google Chrome 25. Но, оказывается, бывают куда более страшные вещи. А именно расширения, устанавливаемые сторонними программами, которые нельзя удалить и даже отключить в браузере.
Жизнерадостный пример
Уже несколько раз ко мне обращались люди, которые не могли удалить из списка своих расширений некое жизнерадостное творение, бесспорно популярное среди пользователей социальных сетей. Различные «Онлайн Улыбки» или вот свежий «Media Player 1.1». Внимание, скриншот:
Внимание, вопрос: что на этом скриншоте вызывает недоумение? Правильный ответ: отсутствие кнопки «Удалить» (она же «Мусорное ведро») у второго расширения. Мало того, если присмотреться, то можно заметить, что и галочка «Enabled» не активна. Т.е. отключить тоже не получится. А подчеркнутая строка объясняет почему оно так. А вот потому что сторонняя разработка имеет полное право блокировать данные возможности в браузере.
Почему?
Но как такое возможно? Неужели это уязвимость или скрытая возможность, по ошибке попавшая в браузер? Но нет. это официальная хорошо задокументированная фишка от разработчиков Chromium. Вот вам документация.
Вот лично мне моя извращенная логика не может подсказать ответ на простой вопрос: зачем? Если простые непрошеные расширения еще как-то можно объяснить (Skype, Касперский), то зачем создавать возможность для этого? Как разработчик может не понимать, что на один случай легального применения обязательно найдется десяток случаев подобного мусора? Ведь штатно и силами обычного пользователя это удалить уже невозможно. Удаление сторонней программы ничего не изменит (в данном случае и нет сторонней программы; всю «грязную» работу провернул обычный инсталлятор).
Как удалить?
2. Для начала чистим реестр. Для Windows делаем так: в командной строке (Выполнить-CMD) запускаем утилиту «regedit».
Необходимо найти и почистить руками следующие ветки:
Для 64-битной системы адрес выглядит уже так:
3. Теперь ищем папки «Extensions», «Extension Rules» и «Extension State» по адресу:
C:\Users\[ваш пользователь]\AppData\Local\Google\Chrome\User Data\Default
И чистим их для гарантии. Это удалит все расширения.
4. Обязательно сканируем компьютер антивирусными программами или софтом, который специализируется на удалении гадостей. Зловред скорее всего прописался в автозагрузку и это может свести на нет все ваши старания. Находим в ней раздел автозагрузки и чистим. Но антивирус это не отменяет!
Расширение бизнес-правил (Master Data Services)
В Службы Master Data Servicesвы можете применять пользовательские скрипты SQL в качестве расширения предопределенных условий и действий.
Все сценарии должны быть определены по схеме [usr].
В качестве условия бизнес-правила можно использовать функции SQL, которые удовлетворяют следующим критериям.
Тип возвращаемого значения должен быть BIT.
Для типов параметров поддерживаются только следующие типы.
DECIMAL (точность, масштаб)
точность должна быть равна 38
масштаб должен иметь значение от 0 до 7
Хранимые процедуры SQL, использующие следующий синтаксис, можно использовать в качестве действия бизнес-правила.
Пользовательские сценарии не будут добавляться в пакеты развертывания. Перед развертыванием пакета убедитесь, что целевая база данных Master Data Services содержит все сценарии, которые используются в бизнес-правилах.
Действия сценариев будут выполняться как mds_br_user со следующими разрешениями.
схема | Разрешения |
---|---|
mdm | SELECT |
stg | SELECT, UPDATE, DELETE, EXECUTE, INSERT |
usr | FULL |
Предварительные требования
Для выполнения этой процедуры:
Иметь разрешение на доступ к функциональной области «Администрирование системы».
необходимо быть администратором модели. Дополнительные сведения см. в разделе Администраторы (службы Master Data Services).
Создание бизнес-правила для использования пользовательского сценария как условия или действия
В диспетчере основных данных щелкните Системное администрирование.
В строке меню выберите Управление и щелкните Бизнес-правила.
Из раскрывающегося списка Сущность выберите сущность.
Из раскрывающегося списка Тип элемента выберите тип элемента, к которому будет применяться бизнес-правило.
Нажмите кнопку Добавить.
Выполните следующие действия, чтобы создать пользовательский сценарий как условие.
Из раскрывающегося списка Оператор в области Пользовательский скрипт выберите пользовательскую функцию.
Отобразятся все параметры пользовательской функции.
Присвойте значения всем параметрам
Выберите команду Сохранить.
Выполните следующие шаги, чтобы использовать пользовательский сценарий как действие.
Из раскрывающегося списка Оператор в области Пользовательский скрипт выберите пользовательскую функцию.
Выберите команду Сохранить.
Яндекс отключил расширения с аудиторией в 8 млн пользователей. Объясняем, почему мы пошли на такой шаг
Сегодня мы приняли решение отключить расширения SaveFrom.net, Frigate Light, Frigate CDN и некоторые другие, установленные у пользователей Яндекс.Браузера. Совокупная аудитория этих инструментов превышает 8 млн человек.
В этом посте мы расскажем о причинах и поделимся с сообществом результатами анализа деятельности расширений. Вы узнаете про тайное воспроизведение видео из онлайн-кинотеатров с целью накрутки просмотров. Увидите фрагмент кода, содержащий механизм для перехвата токенов социальных сетей. Мы покажем, как организована динамическая загрузка и выполнение произвольного кода без обновления расширений.
Предыстория
Некоторое время назад пользователи Яндекс.Браузера стали обращаться в поддержку с жалобами на странный звук, который можно было принять за аудиорекламу. Примеры таких жалоб:
Общение с пользователями помогло нам понять, что источником звука на самом деле была видеореклама. Но странность заключалась в том, что никакое видео в этот момент на экране не воспроизводилось. Сначала мы подумали, что оно проигрывалось в другой открытой вкладке или за пределами видимости, но эта гипотеза не подтвердилась. Начали запрашивать у пользователей дополнительную информацию. В том числе список установленных расширений.
Так мы заметили общий признак: у пострадавших было установлено расширение для загрузки видео от сервиса SaveFrom.net. Начали тестировать. Догадка оказалась верной: отключение расширения отключало и фоновый шум. Затем связались с его разработчиками. Они высказали предположение, что это ошибки конвертера, и внесли исправления. После обновления расширения жалобы на звук прекратились.
Новая история
В ноябре команда антифрода Яндекса заподозрила неладное. Она получила сигнал о том, что кто-то использует аудиторию популярных браузеров для накрутки просмотров видео в онлайн-кинотеатрах. Пользователи видео не видели, потому что оно воспроизводилось в фоне. Тем не менее оно потребляло существенный трафик и перегружало работой вычислительные ресурсы компьютера, поэтому такое поведение нельзя назвать добросовестным.
При этом в поддержку на посторонний звук больше никто не жаловался. Это можно было легко объяснить сознательным исключением аудитории Яндекс.Браузера из целевой. Подобные попытки избежать внимания со стороны нашего антифрода мы уже неоднократно встречали в прошлом при анализе поведения расширений из Chrome Web Store (напомним, что наш браузер поддерживает установку в том числе из этого каталога).
Но всё оказалось куда проще: на этот раз фоновое воспроизведение видео проходило в беззвучном режиме. Вскоре коллеги из Службы информационной безопасности выяснили, что проблема затрагивает не только внешних пользователей нашего браузера, но и даже наших коллег. Так мы получили проблемные ноутбуки для исследования и наконец-то смогли детально разобраться в происходящем.
На проблемных устройствах наших коллег были установлены расширения SaveFrom.net, Frigate Light или Frigate CDN. Источник их установки значения не имел (SaveFrom.net мог быть установлен с сайта, а Frigate — напрямую из каталога Chrome Web Store).
Далее мы поделимся с вами результатами нашего анализа. Приведём фрагменты исходного кода и объясним суть их работы. Начнём с объяснения того, как функциональность может подгружаться в расширение без его обновления, и закончим, собственно, воспроизведением видео на компьютере ничего не подозревающего пользователя.
Динамическая загрузка и выполнение кода
Frigate
(полный код расширения доступен по ссылке)
Оба расширения из этого семейства (Light и CDN) имеют один и тот же участок кода, который отвечает за динамическую подгрузку и исполнение JS-скриптов. Специалистам рекомендую обратить внимание на то, как хитро тут спрятана функция eval(). Кстати, обфускация кода и скрытие функциональности запрещены в Chrome Web Store.
Этот код совершает запрос по адресу fri-gate.org/config.txt и получает адрес командного сервера для дальнейшей работы. Такое решение позволяет без обновления расширения менять адреса командного сервера, если с ним что-то пошло не так. В момент нашего анализа командным сервером был gatpsstat.com.
Раз в час расширения совершают запрос к командному серверу в обработчик /ext/stat. При первом запросе им выставляется cookie, которая содержит uuid пользователя. Ответ сервера декодируется и попадает в функцию debug(), которая, по сути, является функцией eval() для выполнения JS-кода.
SaveFrom.net
(полный код расширения также доступен по ссылке)
На 19122-й строке файла background.js начинается блок сбора и выполнения кода.
Стоит обратить внимание на строку “x = m(99, 111, 110, 115, 116, 114, 117, 99, 116, 111, 114)”, которая аналогична “fromCharCode(99, 111, 110, 115, 116, 114, 117, 99, 116, 111, 114)” из расширения Frigate.
Далее идёт большой switch, который ответственен за загрузку и выполнения JS-кода.
По блокам выполнение происходит так:
Одинаковая часть для всех расширений
/ext/stat
Итак, все рассматриваемые расширения имеют возможность динамически выполнять JS-код, который они получают раз в час из обработчика /ext/stat. Этот JS-код в разные моменты времени может быть любым, сколь угодно опасным. Скрытое воспроизведение видео может быть лишь одним из множества возможных симптомов. Но поймать (и задокументировать) подобные симптомы не так-то и просто. Поначалу мы пытались дампить трафик через функциональность браузера, но это не приносило результатов. Даже начали сомневаться, что выбрали правильный путь. Обратились к более медленному, но надёжному варианту: завернули весь трафик через Burp Suite (это такая платформа для анализа безопасности веб-приложений, которая, среди прочего, позволяет перехватывать трафик между приложением и браузером).
Вскоре детальный анализ трафика принёс плоды. Оказалось, что наши предыдущие попытки получить правильный ответ были неуспешны из-за конфига dangerRules. Он содержал список адресов, после посещения которых потенциально опасная деятельность прекращалась.
Обратите внимание: сомнительная активность прекращалась, если пользователь открывал адрес поддержки Яндекс.Браузера или служебную страницу для анализа трафика. Хитро!
Расследование продолжилось. Предстояло разобраться с обработчиком /ext/up, которому и передавался конфиг. Его ответ был сжат и зашифрован, а код обфусцирован. Но это нас не остановило.
/ext/up
Ещё один обработчик с исполняемым кодом. Его ответ маскируется под GIF-картинку.
Расшифрованный ответ содержит JSON с тремя кусками кода. Названия блоков намекают на контекст исполнения кода: bg.js (применяется на фоновой странице расширения), page.js (используется для инъекций в просматриваемые страницы), entry_point.js (код, который отдаётся на /ext/stat).
bg.js и page.js умеют получать и внедрять в страницы iframe с video для показа рекламы. Кроме того, bg.js имеет функциональность, которая может использоваться для перехвата oAuth-токенов сервиса ВКонтакте. Мы не можем однозначно утверждать, что этот механизм в реальности использовался, но он присутствует в коде, поэтому мы рекомендуем отозвать токены для vk.com.
Кроме того, в bg.js мы видим код, который подменяет браузерный API, чтобы просмотры засчитывались даже при скрытом видео.
/ext/def
Предположительно, этот обработчик отвечает за отдачу списка текущих заданий для открутки видео. Запрос клиента и ответ сервера сжаты и зашифрованы на ключе из параметра hk.
В результате выполнения выданного задания видно, что браузер открывает видеоплеер и включает в нём видео. При этом сам видеоплеер не виден пользователю и действие происходит скрытно.
/ext/beacon
Отчёт о выполнении задания расширение отправляет на /ext/beacon. С уже знакомым нам сжатием и шифрованием.
Краткий пересказ того, что делают расширения
Повторим ещё раз всё то же самое, но кратко.
Принятые нами меры
Мы считаем описанное поведение потенциально опасным и недобросовестным, поэтому приняли решение отключить в Яндекс.Браузере уже установленные копии расширений SaveFrom.net, Frigate Light, Frigate CDN и некоторых других. Пользователи этих расширений получат уведомление, в котором мы расскажем о причинах отключения. После этого они смогут принять осознанное решение и при необходимости включить их вновь (хотя мы настоятельно рекомендуем так не поступать).
Кроме того, мы передали результаты нашего технического анализа коллегам из «Лаборатории Касперского» и Google. В «Лаборатории Касперского» уже подтвердили наличие потенциально вредоносной составляющей в расширениях, теперь продукты компании детектируют эту угрозу и блокируют связанные с ней URL-адреса и фрагменты скриптов.
Также в ходе исследования было обнаружено более двух десятков менее популярных браузерных расширений, использующих аналогичный код. Их мы также отключаем. Мы призываем экспертов присоединиться к поиску и других потенциально опасных расширений. Результаты можно присылать через форму. Вместе мы сможем побороть эту угрозу.
Расширения в браузере: установка, настройка и удаление
Сегодня расскажу о плагинах и расширениях. Зачастую все эти модули называют одинаково, но между ними огромное различие.
Плагины
Они являются компонентами браузера. Некоторые из них не просто желательны, а абсолютно необходимы, поскольку при их отсутствии часть содержимого страниц просто не будет отображаться.
Наиболее яркий пример такого плагина — Adobe Flash Player. Если он не установлен, то вы не увидите значительную часть содержимого веб-страниц. Вторым примером является поддержка открытия PDF непосредственно в окне браузера.
Устанавливать дополнительные плагины вы не можете. Их набор и функционал обновляются только вместе с программой. Таким образом, если вы знаете, что в браузере не хватает какого-то важного плагина, который есть у других, необходимо установить самую свежую версию софта.
Расширения и дополнения
Намного интереснее и обширнее выбор расширений. Эти удобные программные инструменты поддерживаются многими современными браузерами. Фактически, по отношению к ним браузер выступает операционной системой, а работают они непосредственно в окне программы для просмотра веб-сайтов. В их числе — утилиты, офисные инструменты и даже игры.
С годами эти браузерные программы стали настолько удобными и функциональными, что порой могут заменить собой устанавливаемые в операционную систему приложения. В особенности они будут вам полезны, если какие-то задачи приходится выполнять нечасто и ставить для них специальный софт не хотелось бы. Рассматриваемые модули в Сети называют и расширениями и дополнениями. К примеру, в Яндекс.Браузере речь идет о дополнениях, а в Opera уже о расширениях. Хотя каталог софта у этих браузеров общий.
Расширения в Google Chrome
Перейти к настройкам плагинов вы можете через меню браузера:
[Дополнительные инструменты] → [Расширения]
или путем перехода по введенному в адресной строке адресу:
chrome://extensions/
В новом окне отобразятся уже установленные вами расширения. Если их очень много, то полезной будет строка поиска, располагающаяся в центре в верхней части рассматриваемой страницы.
Подобно Google Play, существует также магазин расширений для Chrome. Из него вы сможете загружать и устанавливать дополнительные программные инструменты для браузера.
Слева располагается список категорий.
Но если вы знаете, какое расширение вам необходимо, лучше обратиться к поисковой строке, поскольку перечень трудно назвать подробным. Здесь вы найдете даже игры. К примеру, несколько версий самой популярной игры в истории компьютеров — Тетриса.
Разумеется, ожидать от браузерных игр многого не приходится. Но и они вполне могут быть полезны для того, чтобы с удовольствием провести несколько свободных минут.
Значительно более интересны различные утилиты. В качестве примера, введите в поисковую строку «pdf». Отобразятся расширения, позволяющие работать с этим популярным форматом. В их числе Soda PDF: Convert PDF to Word. Инструмент интересен тем, что позволяет преобразовать PDF в файл формата Word. Чтобы установить его или другое расширение, необходимо нажать на кнопку установки.
Вам будет предложено подтвердить свое решение об инсталляции данного софта.
Когда он установлен, на его странице у вас появляется кнопка, предлагающая удалить программный инструмент.
Здесь вы найдете немало программ, которые помогут вам составлять списки задач, преобразовывать файлы одного формата в другой и расширить функционал браузера.
Расширения в Яндекс.Браузере
Перейти к дополнениям (так называются расширения в Яндекс.Браузере) этого популярнейшего браузера вы сможете, если введете в адресной строке:
browser://tune
Внизу списка установленных дополнений есть кнопка, предлагающая перейти в каталог расширений.
Им является подборка расширений для другого известного браузера — Opera. Эти дополнительные модули совместимы с браузером от Яндекс.
Расположенные в верхней части ссылки предлагают вам посмотреть лучшие дополнения и модули, относящиеся к категории «Безопасность и конфиденциальность». Третья ссылка «Еще» открывает перечень категорий.
Расширения в Opera
Перейти к странице расширений вы можете через основное меню программы, щелкнув мышью по расположенной в верхнем левом углу букве «O».
Во всем остальном вы сможете устанавливать расширения так же, как и дополнения для Яндекс.Браузера и из того же источника. Его я уже рассмотрел выше.
Какие расширения (дополнения) вы считаете самыми удобными и полезными?
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Расширение для хрома: создание, публикация, опыт
В поисках новых площадок для деятельности, я обратил внимание на «виджеты» хрома, которыми пользуюсь давно, но никогда не придавал им значения. Тут же захотелось попробовать что-нибудь реализовать.
Идеей стало создание таск-менеджера для разработчика (и не только), который был бы всегда под рукой. В нем должны были отобразиться актуальные тикеты trello и jira, реквесты в gitlab и т.п. Это те вещи, которые я обычно искал, набирая ключевые слова в адресную строку браузера, типа «jira PM-20».
Расширение для хрома
Я точно знал, что расширения в браузерах — это обычные html-странички, подпитанные js-скриптами. Но при этом не имел представления, как их создавать. Первое, что выдал мне гугл по этому вопросу — статью на medium, а не официальную документацию. Это было даже лучше, т.к. это была обзорная статья простейшего виджета от идеи до публикации.
Статья дала мне представление о том, что разработка «виджета» — дело не слишком хитрое. Я тут же приступил к созданию «hello world!».
Структура
Оказалось, что нужно создать mainfest.json в корне проекта. Он описывает расширение: название, описание, автора, иконки, разрешения и т.п. Первую версию я сделал без изучения документации.
Первый manifest.json
Расширения позволяют запускать js-скрипты в фоне, которые делают что-то даже когда пользователь ими не пользуется. Этот функционал я пощупал очень поверхностно, просто, чтобы понять, как он может работать. Он просто менял заголовок в
«виджета».
Интерес для меня представляла сама страничка html, которая показывается, при нажатии на иконку в браузере, она называется popup.html в моем манифесте.
Работает она точно так же, как и любой веб-сайт, за исключением пары возможностей, например: переходы по ссылкам работают только с target=»_blank». Есть и технические ограничения, управляемые разработчиком, например Content Security Policyили permissions к функционалу браузера, которые запрашиваются у пользователя.
Запустить расширение
После создания папки с manifest.json и popup.html внутри, можно уже запустить её как виджет. На служебной страничке хрома chrome://extensions есть кнопка Загрузить распакованное расширение. С помощью нее выбираем папку
и расширение тут же отображается в списке “виджетов” рядом с адресной строкой.
С этого момента расширение уже можно тестировать: изменять popup.html, и видеть изменения, переоткрыв “виджет” нажатием на его иконку.
Публикация в webstore
Начнем с того, что возможность публикации первых 20 расширений стоит 5$. Происходит она в dashboard вебстора, для этого потребуется залить zip-архив содержимого папки расширения и поработать над рекламными текстами и картинками.
Подготовка к публикации расширения
Первая часть описания расширения будет отображаться из свойства description манифеста расширения, остальное дописывается в Detailed description в управлении расширением на webstore.
Расширение имеет гибкие настройки публикации: можно выбрать регионы мира для публикации, а также видимость расширения.
Нужно помнить, что если вы выбираете для публикации только РФ, то в остальных странах расширение не появится. Я наткнулся на это находясь в Таиланде: не мог понять почему, спустя 2 дня, расширение не ищется в сторе даже по прямому названию.
Продвинутые опции
Я описал необходимые шаги для публикации простейшего расширения, чтобы процесс был понятен. Теперь хочу осветить некоторые детали для написания более сложного “виджета“.
Суть моего расширения в использовании чужих API для получения информации. Для этого мне нужен как минимум localStorage, чтобы запоминать токены авторизации.
Я воспользовался «permissions»: [«storage»] в своем манифесте.
OAuth2
В большинстве случаев разработчики API предлагают OAuth2 протокол для авторизации.
Если вы не знакомы с этим протоколом: он предлагает безопасный процесс аутентификации и авторизации приложения от лица пользователя без доступа к логину/паролю со стороны этого приложения.
Протокол описывает несколько способов для авторизации. В идеале нужно использовать Authorization Code Flow, которое предполагает наличие бэкенда у приложения; API редиректит пользователя с Auth-кодом на приложение, а приложение на бэкенде обменивает его на токен.
Есть также упрощенный Implicit Flow, позволяющий авторизовываться без бэкенда: API после авторизации редиректит пользователя на приложение с токеном в URL.
Как же пользоваться этой “редиректной” авторизацией в расширении хрома? Заводить веб-сайт? Оказывается, что не обязательно.
Мои костыли
Изначально я взялся интегрироваться с Gitlalb и Trello. С Gitlab все оказалось “просто”: отправляешь пользователя в админку к его Gitlab, чтобы он сделал токен и передал его тебе. С таким подходом долго возиться не пришлось, я просто сделал поле для ввода токена и описал как его получить.
Trello же предоставил OAuth2, я сразу же заметил, что в нем есть implicit flow, но немного странный: токен отображается на их странице /approve в таком виде
Не став углубляться, я так же сделал поле для ввода токена в своем расширении и описал пользователю, как это сделать.
Правильный способ
Как обычно, хорошее решение приходит не сразу. Я на него наткнулся, когда начал интеграцию с Jira, которая имеет только Authorization Code Flow.
Как-то случайно я наткнулся на chrome.identity: функционал браузера, уже реализовавший все “костыли” для авторизации. Этот функционал требует включения identityв разрешениях манифеста. Я дополнил свой манифест: «permissions»: [«storage», «identity»].
Для этого нужно воспользоваться chrome.identity.launchWebAuthFlow(), которое открывает страницу авторизации API в новом окне:
Окно авторизации chrome.identity.launchWebAuthFlow
Другие опции
Когда появляется идея реализовать какой-либо функционал, рекомендую гуглить chrome API, т.к. в нем уже достаточно много подобных фич, которые облегчат вам работу. Например полный manifest.json впечатляет:
Предварительно разбираться со всеми возможностями может оказаться слишком расточительным, т.к. их огромное количество.
К тому же только js-сторона расширения сама по себе может увеличиться до больших размеров.
Моя текущая схема
Продвижение
Немного стоит упомянуть продвижение своего расширения. Особенностью “виджетов” является то, что они направлены на пользователей десктопов, которые в последние годы успели стать меньшинством.
Я попробовал контекстную рекламу и рекламу в социальных сетях. Получил небольшой опыт и нулевую конверсию.
Контекстная реклама
Мой опыт пока ограничился одной площадкой, не могу говорить за остальные, но думаю, там то же самое.
Оказывается, что в контекстной рекламе яндекса нельзя настраивать таргетинг по устройствам и браузерам. Так что если ваше расширение только для хрома, показывать рекламу придется и людям, сидящим на других браузерах, переходы которых принесут только лишние убытки.
Я не хотел делать отдельный сайт для своего расширения, поэтому рекламировал его страницу в webstore. Минус этого подхода в том, что ты можешь доверять только статистике рекламного кабинета и не можешь увидеть как пользователи ведут себя на рекламируемой странице.
Социальные сети
Они как раз и относятся к категории сайтов, на которых десктоп это умирающее меньшинство.
Вконтакте предоставляет таргетинг на мобильную и полную версию своего сайта. Но эта галочка скрыта в самом конце настроек, лично я ее не заметил до того, как слил бюджет и увидел в статистике печальный охват
На самом деле в тот день мобильные просмотры были сильно больше
Мысли напоследок
Я считаю, что расширения это мощный инструмент для людей, работающих в интернете, т.к. в браузере мы проводим много времени, которое иногда хочется оптимизировать. Например виджет гугл-переводчика, переводящий текст при выделении, хороший пример оптимизации. Решение проблемы огромного количества открытых вкладок “на попозже” я тоже решил с помощью виджета.
Написание расширений дает опыт в изучении подводной части айсберга “Chrome” и написании “фронтенда” (особенно если вы бэкенд-разработчик). Расширения можно писать на том же React JS с которого можно перекинуться на написание приложений под мобильные устройства. Процесс написания и того и того очень похожий.