Современные мобильные браузеры, как и их десктопные аналоги, должны позволять пользователям добавлять недостающие возможности с помощью дополнений. Несмотря на отказ команды Chromium от идеи поддержки расширений на Android, наша команда продолжает работать над этой возможностью, и сегодня мы приглашаем сообщество Хабра попробовать первую альфу Яндекс.Браузера, в которую вы уже сможете установить LastPass, Tampermonkey или даже Ghostery.
Первые дополнения появились в Internet Explorer еще в 1999 году и за следующее десятилетие практика открытия доступа к API стала обязательной для любого более-менее популярного браузера. Сейчас многие из нас не представляют себе работу за компьютером без возможности добавить в браузер необходимую функцию собственными руками. А вот с Android пока еще все не так. Несмотря на рост производительности современных мобильных устройств, браузерные расширения на Android – скорее исключение, чем правило.
Мобильные браузеры не всегда воспринимались пользователями всерьез. Во времена медленного интернета и слабых мобильных устройств люди предпочитали решать свои задачи с помощью компьютера. Сейчас их отношение постепенно меняется. Нас все чаще просят добавить в продукт специфичные функции и инструменты. Что-то из этого мы встраиваем в Яндекс.Браузер (например, режим чтения и переводчик). Но многие из запросов было бы логично решить с помощью сторонних дополнений, а не перегружать Браузер. Добавим к этому традиционную просьбу поддержать дополнения на Android, которую достаточно часто присылают через обратную связь. В общем, мы стали не закрывать глаза на изменения вокруг и приступили к разработке.
Поддержать дополнения в браузере на Android можно двумя способами. Можно предусмотреть API, с которым бы работали другие приложения из Google Play. Эта практика уже многим знакома: например, кодеки для видеоплееров зачастую распространяются в виде отдельных приложений. Мы и сами нечто подобное совсем недавно сделали с блокировкой рекламы. У этого подхода есть два больших минуса: отсутствие дополнений на старте и необходимость создавать свой велосипед, который был бы несовместим с дополнениями для настольной версии браузера. А нам бы хотелось, чтобы люди могли использовать на Android те же инструменты, к которым они привыкли на компьютере.
В чем заключается второй способ, вы уже догадались. Расширения для Chrome и других браузеров на основе Chromium появились в начале 2010 года, и тысячи разработчиков со всего мира в течение всех этих лет создавали собственные инструменты. Яндекс.Браузер, несмотря на функциональные отличия, также основан на Chromium и поддерживает установку дополнений на компьютере. И вполне логично в этой ситуации распространить поддержку еще и на Android. До нас этого никто не сделал, но какие тут могут быть сложности, ведь на Windows все работает?
Сначала может показаться, что все проблемы в отсутствии интерфейса для дополнений. Этого кода и правда нет в проекте, но мы изначально использовали собственный интерфейс, поэтому так нам было даже проще. Но нарисовать интерфейс – это капля в море, основные трудности связаны не с ним.
Когда мы попробовали собрать Яндекс.Браузер для Android с флагом enable_extensions, то получили порядка 600 ошибок совместимости. Флаг включения расширений, как и отвечающий за них код, был до мозга костей завязан на специфичное для десктопа окружение. Небольшой пример для любопытных разработчиков. Возьмем объект Browser. Browser – центральный контроллер UI десктопного браузера. Он содержит много чего интересного, в том числе модель TabStripModel, которая активно используется дополнениями для работы с вкладками. Но под Android все это не собирается. Мы начинаем тянуть за одну нить, а вытягиваем целый ворох несовместимостей. И так на каждом шагу.
Платформа расширений за 6 лет обросла большим количеством API. И у каждого из них могут быть десятки методов со своей непредсказуемой работой на Android. Поэтому для начала мы поддержали наиболее востребованные возможности, которых вполне достаточно для того, чтобы уже в альфе заработали такие дополнения, как Evernote, LastPass, Ghostery, SaveFrom.net, Tampermonkey, Яндекс.Погода и многие другие. Кстати, с этим нам помогли разработчики популярных дополнений, которых примерно месяц назад мы пригласили на закрытое тестирование ранних сборок. Чтобы им было проще ориентироваться в наших возможностях, мы написали диагностическое расширение, которое формирует наглядный отчет.
Что касается источников дополнений, то тут мы традиционно не ограничиваем людей каким-то одним каталогом и поддерживаем установку из Chrome Web Store, Opera Addons, собственного раздела рекомендованных дополнений, по inline-ссылкам или просто из каталога на SD-карте.
В заключение несколько слов о безопасности. Наша реализация дополнений на Android полностью соответствует общепринятой модели, т.е. дополнения работают в «песочнице» и изолированы как от остальной части браузера, так и от операционной системы. К тому же, как и на десктопе, мы умеем блокировать известные вредоносные разработки.
Установить альфа-версию Яндекс.Браузера можно из Google Play. После второго холодного запуска (особенность альфы) в настройках вы найдете целый раздел, посвященный дополнениям. Мы были бы благодарны сообществу Хабра за отзывы и идеи.
Первые дополнения появились в Internet Explorer еще в 1999 году и за следующее десятилетие практика открытия доступа к API стала обязательной для любого более-менее популярного браузера. Сейчас многие из нас не представляют себе работу за компьютером без возможности добавить в браузер необходимую функцию собственными руками. А вот с Android пока еще все не так. Несмотря на рост производительности современных мобильных устройств, браузерные расширения на Android – скорее исключение, чем правило.
Мобильные браузеры не всегда воспринимались пользователями всерьез. Во времена медленного интернета и слабых мобильных устройств люди предпочитали решать свои задачи с помощью компьютера. Сейчас их отношение постепенно меняется. Нас все чаще просят добавить в продукт специфичные функции и инструменты. Что-то из этого мы встраиваем в Яндекс.Браузер (например, режим чтения и переводчик). Но многие из запросов было бы логично решить с помощью сторонних дополнений, а не перегружать Браузер. Добавим к этому традиционную просьбу поддержать дополнения на Android, которую достаточно часто присылают через обратную связь. В общем, мы стали не закрывать глаза на изменения вокруг и приступили к разработке.
Поддержать дополнения в браузере на Android можно двумя способами. Можно предусмотреть API, с которым бы работали другие приложения из Google Play. Эта практика уже многим знакома: например, кодеки для видеоплееров зачастую распространяются в виде отдельных приложений. Мы и сами нечто подобное совсем недавно сделали с блокировкой рекламы. У этого подхода есть два больших минуса: отсутствие дополнений на старте и необходимость создавать свой велосипед, который был бы несовместим с дополнениями для настольной версии браузера. А нам бы хотелось, чтобы люди могли использовать на Android те же инструменты, к которым они привыкли на компьютере.
В чем заключается второй способ, вы уже догадались. Расширения для Chrome и других браузеров на основе Chromium появились в начале 2010 года, и тысячи разработчиков со всего мира в течение всех этих лет создавали собственные инструменты. Яндекс.Браузер, несмотря на функциональные отличия, также основан на Chromium и поддерживает установку дополнений на компьютере. И вполне логично в этой ситуации распространить поддержку еще и на Android. До нас этого никто не сделал, но какие тут могут быть сложности, ведь на Windows все работает?
Сначала может показаться, что все проблемы в отсутствии интерфейса для дополнений. Этого кода и правда нет в проекте, но мы изначально использовали собственный интерфейс, поэтому так нам было даже проще. Но нарисовать интерфейс – это капля в море, основные трудности связаны не с ним.
Когда мы попробовали собрать Яндекс.Браузер для Android с флагом enable_extensions, то получили порядка 600 ошибок совместимости. Флаг включения расширений, как и отвечающий за них код, был до мозга костей завязан на специфичное для десктопа окружение. Небольшой пример для любопытных разработчиков. Возьмем объект Browser. Browser – центральный контроллер UI десктопного браузера. Он содержит много чего интересного, в том числе модель TabStripModel, которая активно используется дополнениями для работы с вкладками. Но под Android все это не собирается. Мы начинаем тянуть за одну нить, а вытягиваем целый ворох несовместимостей. И так на каждом шагу.
Платформа расширений за 6 лет обросла большим количеством API. И у каждого из них могут быть десятки методов со своей непредсказуемой работой на Android. Поэтому для начала мы поддержали наиболее востребованные возможности, которых вполне достаточно для того, чтобы уже в альфе заработали такие дополнения, как Evernote, LastPass, Ghostery, SaveFrom.net, Tampermonkey, Яндекс.Погода и многие другие. Кстати, с этим нам помогли разработчики популярных дополнений, которых примерно месяц назад мы пригласили на закрытое тестирование ранних сборок. Чтобы им было проще ориентироваться в наших возможностях, мы написали диагностическое расширение, которое формирует наглядный отчет.
Что касается источников дополнений, то тут мы традиционно не ограничиваем людей каким-то одним каталогом и поддерживаем установку из Chrome Web Store, Opera Addons, собственного раздела рекомендованных дополнений, по inline-ссылкам или просто из каталога на SD-карте.
В заключение несколько слов о безопасности. Наша реализация дополнений на Android полностью соответствует общепринятой модели, т.е. дополнения работают в «песочнице» и изолированы как от остальной части браузера, так и от операционной системы. К тому же, как и на десктопе, мы умеем блокировать известные вредоносные разработки.
Установить альфа-версию Яндекс.Браузера можно из Google Play. После второго холодного запуска (особенность альфы) в настройках вы найдете целый раздел, посвященный дополнениям. Мы были бы благодарны сообществу Хабра за отзывы и идеи.
Поделиться с друзьями
Akr0n
А uBlock работает?
Assada
Попытался поставить из магазина Opera. Возникла ошибка «Заблокировано администратором».
BarakAdama
У нас сейчас целых два способа для блокировки рекламы: встроенная кнопка скрытия рекламы в меню (тоже только в альфе) и еще полноценное API, которое уже поддерживают Adguard, ABP и некоторые другие https://tech.yandex.ru/browser/contentblocker/. Стоит ли поддерживать третий способ, который по определению окажется менее производительным и более требовательным к ресурсам? Сложный вопрос.
Assada
Кнопка скрытия рекламы почему-то оставила только рекламу яндекса =)
BarakAdama
Для кнопки в меню никакого «белого списка» нет. В этом ее смысл. Скрыть и сообщить нам о том, что пользователю не нравится, чтобы дальше мы научили браузер с помощью машинного обучения понимать что хорошо, а что нет.
Но фильтры сейчас работают не всегда так, как должны. Это именно техническая ошибка (согласен, выглядит очень подозрительно, но все проще).
Waki
Конечно все проще, вы просто оставили свою рекламу :)
BarakAdama
В соседнем комментарии я рассказал об исключениях в способе с API. Обманывать для способа с кнопкой нет никакого смысла :)
BarakAdama
Все. Теперь скрывается. Причина была в фильтрах, которые не были ориентированы на рунет.
handicraftsman
Ага. Обучения. Мне на хабре спамит покупкой автомобилей и платными курсами по языкам, к которым я ни на милю не приближусь, а пункт "неинтересна реклама на эту тему" скрывается после первого же его использования.
ValdikSS
BarakAdama
На всякий случай напишу, что это не Директ.
Am0ralist
вот у меня сейчас директ по ссылке привел на агрегатор других магазинов, в котором ссылка привела на явных мошенников.
я написал в агрегатор, написал в директ.
вопрос: как и кто за это отвечать будет, а?
я предугадаю отве от яндексат: за рекламу отвечают те то. а те мне ответят, что они за чужой магаз не отвечают.
Так вот, реальная защита пользователей требует ответственности на каждом этапе. Ваш директ ни за что не отвечает. Так что не надо распинаться, что вы и без адблока справитесь.
handicraftsman
И у гугла тоже…
BarakAdama
Попробуйте новую альфу. Теперь Директ скрывается. Причина была в международных фильтрах, которые не слишком хорошо работали с рунетом.
Akr0n
Я правильно понимаю, что ваше API для Adguard сознательно пропускает рекламу от Яндекс. Директ?
BarakAdama
В способе с API сейчас действительно есть список исключений. В нём находится Директ, потому что мы следим за качеством рекламы в Директе самостоятельно, как по сигналам из крестика у каждого объявления, так и по сигналам от новой функции жалобы на рекламу из меню мобильного браузера, у которой нет списка исключений и которая в том числе действует и на Директ.
4410
Хорошо следите.
Massacre
Видимо, в Яндексе премодерация отсутствует полностью…
balamyt92
«я хочу блокировать всю рекламу без исключения. Уж поверьте, вы от этого денег не потеряете, ибо я в принципе не кликаю на рекламу.» © любой человек который ставит блокировщик рекламы.
BarakAdama
Это не так. Согласно нашим исследованиям, многие пользователи блокировщиков не против рекламы вообще, но устанавливают их из-за мошеннической, шок-рекламы, попап окон «Вы победитель!» и прочих подобных форматов.
izzholtik
Так и есть. И, уж простите, этого добра в директе предостаточно.
Am0ralist
я, блин, в свое время задолбался писать в ТП по поводу явно мошеннических сайтов именно в рекламных блоках.
когда по запросу определенного сотового телефона выходила одна ссылка на самсунг, одна на нормальный магазин и штуки три — явные разводы.
угадайте, менялось ли что после ответов вашей ТП?
«мы следим за качеством рекламы в Директе самостоятельно», на самом деле — НЕТ.
digitalHitler
Простите, а можно как-нибудь где-нибудь эти исследования почитать? Хочу таблицы, графики и простыни.
BarakAdama
Не уверен, что оно где-то снаружи опубликовано. Мы его для собственного понимания ситуации проводили.
mihmig
Вам пресс-служба всё равно не разрешит сказать правду, так что давайте я скажу за Вас:
Яндекс браузер готов содействовать блокировке рекламы, но только не директа. Какой бы она ни была — деньги не пахнут.
BarakAdama
В способе с блокировкой рекламы через кнопку в меню у Директа нет никакой специальной защиты.
olegator99
Только "следите за качеством рекламы"? Денег за показы/клики видимо не берете.
Splo1ter
А как из него исключить Директ?
spmbt
Написать Хром- (или скрипт для TamperMonkey) расширение, которое будет в оставшемся по второму кругу исключать Директ.
Miha_xXx
Ценность и главное отличие способа uBlock в том, что он блокирует ВСЮ рекламу, безо всяких белых списокв, как это происходит сейчас. Если уж делаете полноценную поддержку десктопных расширений, делайте её для всех. К слову, uBlock является куда более производительным чем тот же ABP, про который вы говорили.
BarakAdama
Я говорил про производительность API и нативного решения. Ни один способ с расширениями с ним не сравнится в этом плане.
Endiruslan
Думал в Google быстрее это сделают, а тут на тебе. Неожиданно. Будем тестить
Am0ralist
а зачем это гуглу на подчиненной ему ОС-ке?
пчелы против меда?
OnYourLips
Если появится везде, то появится и у гугла, чтобы не терять аудиторию.
Но первыми это делать им не выгодно: не только затраты на разработку, но и вред от снижения доходов на рекламе.
tundrawolf_kiba
А можете добавить такую вещь — возможность для какого-либо расширения поставить его локальное состояние, чтобы оно не синхронизировалось для конкретного расширения, как пример — расширение frigate — дома я его обычно все время включаю, а на работе оно не нужно совершенно.
BarakAdama
Уточню. Вы про то, чтобы на одном устройстве расширение было включено, но на другом выключено?
tundrawolf_kiba
Да, верно. Но чтобы при этом не нужно было отключать синхронизацию остальных расширений.
qrck13
В гугловом мобильном chrome, не смотря на «происки конкурентов», думаю еще очень не скоро появится поддержка расширений, если вообще появится.
Они скорее заблокируют в play store все, что позволяет блокировать рекламу.
Zagrebelion
Lastpass пошёл на адаптацию плагина под мобильный браузер? Мне помнится, они хотели денег за мобильное приложение.
BarakAdama
Для многих расширений адаптации вообще не понадобилось.
Noahzgard
А Lastpass Не работал в яндекс браузере на мобильном) Это Яндекс «пошел на адаптацию» :D
Veikedo
А под ios такое возможно/легально/запланировано?
Кстати, помнится был/есть Dolphin браузер на андроид. В нём поддержка расширений была ещё года три назад.
BarakAdama
Dolphin, насколько я помню, поддерживает свои дополнения, созданные для себя на Android. Здесь же речь о поддержке тех же расширений, что опубликованы в Chrome Web Store и Opera Addons. Т.е. совместимые с Chromium.
На iOS сейчас планов нет. Платформа имеет свои особенности, к тому же нужно для начала посмотреть, как эта идея будет работать на Android.
temujin
Работает-ли в Крыму Chrome Web Store? Тот же Гугл отключил Google Play для крмычан, хотя через vpn приложения можно обойти без особого труда.
BarakAdama
Честно говоря, не знаю. У нас на этот случай есть еще два каталога.
LepreconSTR
Как и плей маркет, работает но только через vpn
Fullmoon
Нет, не работает. Каталог Оперы работает, но там, конечно, выбор поменьше.
Kondra007
А как (если можно, "на пальцах") работает проверка совместимости дополнений?
К примеру, для Chrome есть замечательный аддон "The Great Suspender", который выгружает из памяти неиспользуемые вкладки, экономя RAM. Очевидно (по крайней мере, мне), что на Android этот механизм работает совсем иначе, к тому же, Яндекс.Браузер сам занимается выгрузкой вкладок (и опять я жалею, что вы угробили "умный кэш", который кластерный).
Как в этом случае будет себя вести браузер при попытке установить The Great Suspender?
а) Скажет, что "дополнение несовместимо"
б) Установит, но оно не будет работать
в) Установит, и оно будет работать неправильно / приведёт к падению
г) Другое
BarakAdama
Оно установилось и как-то даже работало. Но не факт, что так, как надо :) Нужно детально исследовать.
Если дополнение заведомо использует API, которые мы не поддерживаем, то оно просто не установится.
nikitastaf1996
Прекрасный новость.Но yandex.Я как то застрял в google экосистеме.
watashiwaale
Заголовок целиком и полностью правдив — поддержки расширений для Chromium и правда в мобильных браузерах не было. А вот мобильный Firefox вполне неплохо поддерживает аддоны от десктопного (с небольшими изменениями, видимо, но не суть) с самого начала.
Lordbl4
ЯБ научился запускать расширения — научатся и другие, и это здорово.
modos189
Ну не факт, что ПЕРВЫЙ мобильный браузер с поддержкой Chromium расширений. Как известно, не так давно в Firefox была добавлена поддержка WebExtentions, а в недавней статье описано, как с помощью специального дополнения можно устанавливать Chromium расширения. Правда, в мобильной версии Firefox не отображаются иконки Chromium расширений, но работающие сами по себе расширения вполне могли бы работать.
BarakAdama
Это все же портирование, а не прямая установка.
modos189
С одной стороны — да. С другой — в процессе конвертирования по сути только меняются несколько строк в манифесте и перепаковывается в тот же zip архив, переименованный в другое разрешение.
brainunit
BarakAdama, у вас на сайте есть анонс этой фичи? Если есть на английском, будет замечательно.
pda11111
В принципе есть Readme на Github
JustPeople
Судя по набору, расширений в браузере, автор что-то замышляет.
damat
А можно просто кеширование сделать?.. Вымораживает, что на девайсе с несколькими гигами памяти страницы перезагружаются, если перейти в другое приложение и вернуться в браузер. Причем обидно, что сначала показывают превью страницы, а потом белый экран и загрузка страницы заново. А интернета уже может и не быть.
BarakAdama
Мы даже сделали его. Потом нашли проблемы и ушли переосмысливать идею.
damat
Да, читал, но так на Андроиде и не увидел в хоть как-то работающем виде. Но почему-то у Dolphin, если все правильно помню, все давно получилось. До сих пор помню, как года четыре назад загрузил простым релоадом в аэропорту 15 страниц случайных цитат баша, и читал их потом на борту.
commandasombra
Хорошо бы что бы Anonymox стал работать на мобильных браузерах…
MikeGav
Свои наработки вернули в upstream?
BarakAdama
Чтобы что-то «вернуть», надо чтобы с той стороны захотели их принять, т.е. чтобы в Google поменяли свои планы на Chrome. Это что касается расширений. А вообще мы апстримим, конечно же. Вот хороший пример.
migs911
Даже скачаю ради этого альфу! Надеюсь она не очень глючит)
Varkus
Если кликаю крестик на рекламе гугла меня вежливо спрашивают что не понравилось, отвечаю, мне не сложно.
Если кликаю крестик на рекламе яндекс открывается новая вкладка, КАРЛ!!! Я не знаю что на этой вкладке яндекс от меня хочет, потому что сразу её закрываю и такие рекламные блоки сразу в банерорезку.
lostmsu
Firefox
spmbt
Шаг, действительно, значимый, потому что до сих пор вообще расширения в мобильных поддерживал Firefox Mobile, да и то лишь отдельные расширения для мобильных браузеров (если у разработчика дошли руки его сделать).
Для Dolphin пишут тоже собственные дополения — http://www.dolphin-browser.com/android/addons/index.html?from=mobile_official_website&l=en_US, годящиеся для этого браузера.
riget09
Мобильная версия FireFox давно поддерживает расширения.
BarakAdama
Никто с этим не спорит. Мобильный Firefox поддерживает свои мобильные расширения. Dolphin поддерживает свои мобильные расширения. А Яндекс.Браузер поддержал установку десктопных расширений для Chromium.
Methos
Наконец-то!
Methos
Моё расширение nnru отлично работает! Спасибо громадное.
Правда, не влазит на экран, поэтому впереди много работы по стилизации.
BarakAdama
Для больших попапов мы хотим скролл добавить.
Methos
Баг. Отчего-то в поле ввода текста не всплывает клавиатурка.