Современные мобильные браузеры, как и их десктопные аналоги, должны позволять пользователям добавлять недостающие возможности с помощью дополнений. Несмотря на отказ команды Chromium от идеи поддержки расширений на Android, наша команда продолжает работать над этой возможностью, и сегодня мы приглашаем сообщество Хабра попробовать первую альфу Яндекс.Браузера, в которую вы уже сможете установить LastPass, Tampermonkey или даже Ghostery.

image

Первые дополнения появились в 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. После второго холодного запуска (особенность альфы) в настройках вы найдете целый раздел, посвященный дополнениям. Мы были бы благодарны сообществу Хабра за отзывы и идеи.
Поделиться с друзьями
-->

Комментарии (74)


  1. Akr0n
    02.09.2016 10:40
    +4

    А uBlock работает?


    1. Assada
      02.09.2016 10:54
      +4

      Попытался поставить из магазина Opera. Возникла ошибка «Заблокировано администратором».


    1. BarakAdama
      02.09.2016 10:59
      -5

      У нас сейчас целых два способа для блокировки рекламы: встроенная кнопка скрытия рекламы в меню (тоже только в альфе) и еще полноценное API, которое уже поддерживают Adguard, ABP и некоторые другие https://tech.yandex.ru/browser/contentblocker/. Стоит ли поддерживать третий способ, который по определению окажется менее производительным и более требовательным к ресурсам? Сложный вопрос.


      1. Assada
        02.09.2016 11:00
        +22

        Кнопка скрытия рекламы почему-то оставила только рекламу яндекса =)


        1. BarakAdama
          02.09.2016 11:24

          Для кнопки в меню никакого «белого списка» нет. В этом ее смысл. Скрыть и сообщить нам о том, что пользователю не нравится, чтобы дальше мы научили браузер с помощью машинного обучения понимать что хорошо, а что нет.

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


          1. Waki
            02.09.2016 11:31
            +13

            Конечно все проще, вы просто оставили свою рекламу :)


            1. BarakAdama
              02.09.2016 12:02
              +1

              В соседнем комментарии я рассказал об исключениях в способе с API. Обманывать для способа с кнопкой нет никакого смысла :)


            1. BarakAdama
              07.09.2016 06:58

              Все. Теперь скрывается. Причина была в фильтрах, которые не были ориентированы на рунет.


          1. handicraftsman
            02.09.2016 15:12
            +1

            Ага. Обучения. Мне на хабре спамит покупкой автомобилей и платными курсами по языкам, к которым я ни на милю не приближусь, а пункт "неинтересна реклама на эту тему" скрывается после первого же его использования.


            1. ValdikSS
              02.09.2016 22:20
              +2

              image


              1. BarakAdama
                02.09.2016 22:29
                +12

                На всякий случай напишу, что это не Директ.


                1. Am0ralist
                  04.09.2016 22:52
                  +1

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

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


              1. handicraftsman
                03.09.2016 12:38

                И у гугла тоже…


        1. BarakAdama
          07.09.2016 06:57

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


      1. Akr0n
        02.09.2016 11:01
        +11

        Я правильно понимаю, что ваше API для Adguard сознательно пропускает рекламу от Яндекс. Директ?


        1. BarakAdama
          02.09.2016 12:01
          +1

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


          1. 4410
            02.09.2016 12:08
            +2

            Хорошо следите.

            Картиночка
            image


            1. Massacre
              02.09.2016 12:43
              +2

              Видимо, в Яндексе премодерация отсутствует полностью…


          1. balamyt92
            02.09.2016 12:12
            +3

            В способе с API сейчас действительно есть список исключений.


            «я хочу блокировать всю рекламу без исключения. Уж поверьте, вы от этого денег не потеряете, ибо я в принципе не кликаю на рекламу.» © любой человек который ставит блокировщик рекламы.


            1. BarakAdama
              02.09.2016 12:15
              +3

              любой человек который ставит блокировщик рекламы.


              Это не так. Согласно нашим исследованиям, многие пользователи блокировщиков не против рекламы вообще, но устанавливают их из-за мошеннической, шок-рекламы, попап окон «Вы победитель!» и прочих подобных форматов.


              1. izzholtik
                02.09.2016 12:18
                +2

                Так и есть. И, уж простите, этого добра в директе предостаточно.


              1. Am0ralist
                02.09.2016 23:25
                +3

                я, блин, в свое время задолбался писать в ТП по поводу явно мошеннических сайтов именно в рекламных блоках.
                когда по запросу определенного сотового телефона выходила одна ссылка на самсунг, одна на нормальный магазин и штуки три — явные разводы.
                угадайте, менялось ли что после ответов вашей ТП?
                «мы следим за качеством рекламы в Директе самостоятельно», на самом деле — НЕТ.


              1. digitalHitler
                03.09.2016 15:56

                Простите, а можно как-нибудь где-нибудь эти исследования почитать? Хочу таблицы, графики и простыни.


                1. BarakAdama
                  03.09.2016 16:06

                  Не уверен, что оно где-то снаружи опубликовано. Мы его для собственного понимания ситуации проводили.


                  1. mihmig
                    05.09.2016 09:01

                    Вам пресс-служба всё равно не разрешит сказать правду, так что давайте я скажу за Вас:
                    Яндекс браузер готов содействовать блокировке рекламы, но только не директа. Какой бы она ни была — деньги не пахнут.


                    1. BarakAdama
                      05.09.2016 09:10

                      В способе с блокировкой рекламы через кнопку в меню у Директа нет никакой специальной защиты.


          1. olegator99
            02.09.2016 14:40

            Только "следите за качеством рекламы"? Денег за показы/клики видимо не берете.


          1. Splo1ter
            02.09.2016 18:11

            А как из него исключить Директ?


            1. spmbt
              04.09.2016 05:04

              Написать Хром- (или скрипт для TamperMonkey) расширение, которое будет в оставшемся по второму кругу исключать Директ.


      1. Miha_xXx
        03.09.2016 08:06

        Ценность и главное отличие способа uBlock в том, что он блокирует ВСЮ рекламу, безо всяких белых списокв, как это происходит сейчас. Если уж делаете полноценную поддержку десктопных расширений, делайте её для всех. К слову, uBlock является куда более производительным чем тот же ABP, про который вы говорили.


        1. BarakAdama
          03.09.2016 08:07

          Я говорил про производительность API и нативного решения. Ни один способ с расширениями с ним не сравнится в этом плане.


  1. Endiruslan
    02.09.2016 10:45
    +8

    Думал в Google быстрее это сделают, а тут на тебе. Неожиданно. Будем тестить


    1. Am0ralist
      02.09.2016 11:38
      +2

      а зачем это гуглу на подчиненной ему ОС-ке?
      пчелы против меда?


    1. OnYourLips
      02.09.2016 12:38

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


  1. tundrawolf_kiba
    02.09.2016 10:50
    +1

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


    1. BarakAdama
      02.09.2016 12:24

      Уточню. Вы про то, чтобы на одном устройстве расширение было включено, но на другом выключено?


      1. tundrawolf_kiba
        02.09.2016 12:42

        Да, верно. Но чтобы при этом не нужно было отключать синхронизацию остальных расширений.


  1. qrck13
    02.09.2016 11:31

    В гугловом мобильном chrome, не смотря на «происки конкурентов», думаю еще очень не скоро появится поддержка расширений, если вообще появится.
    Они скорее заблокируют в play store все, что позволяет блокировать рекламу.


  1. Zagrebelion
    02.09.2016 11:36
    +1

    Lastpass пошёл на адаптацию плагина под мобильный браузер? Мне помнится, они хотели денег за мобильное приложение.


    1. BarakAdama
      02.09.2016 12:06
      +5

      Для многих расширений адаптации вообще не понадобилось.


    1. Noahzgard
      02.09.2016 13:06
      +1

      А Lastpass Не работал в яндекс браузере на мобильном) Это Яндекс «пошел на адаптацию» :D


  1. Veikedo
    02.09.2016 11:40
    +1

    А под ios такое возможно/легально/запланировано?
    Кстати, помнится был/есть Dolphin браузер на андроид. В нём поддержка расширений была ещё года три назад.


    1. BarakAdama
      02.09.2016 12:09
      +2

      Dolphin, насколько я помню, поддерживает свои дополнения, созданные для себя на Android. Здесь же речь о поддержке тех же расширений, что опубликованы в Chrome Web Store и Opera Addons. Т.е. совместимые с Chromium.

      На iOS сейчас планов нет. Платформа имеет свои особенности, к тому же нужно для начала посмотреть, как эта идея будет работать на Android.


  1. temujin
    02.09.2016 12:23

    Работает-ли в Крыму Chrome Web Store? Тот же Гугл отключил Google Play для крмычан, хотя через vpn приложения можно обойти без особого труда.


    1. BarakAdama
      02.09.2016 12:25
      +2

      Честно говоря, не знаю. У нас на этот случай есть еще два каталога.


    1. LepreconSTR
      02.09.2016 14:40

      Как и плей маркет, работает но только через vpn


    1. Fullmoon
      02.09.2016 14:40

      Нет, не работает. Каталог Оперы работает, но там, конечно, выбор поменьше.


  1. Kondra007
    02.09.2016 14:40

    А как (если можно, "на пальцах") работает проверка совместимости дополнений?
    К примеру, для Chrome есть замечательный аддон "The Great Suspender", который выгружает из памяти неиспользуемые вкладки, экономя RAM. Очевидно (по крайней мере, мне), что на Android этот механизм работает совсем иначе, к тому же, Яндекс.Браузер сам занимается выгрузкой вкладок (и опять я жалею, что вы угробили "умный кэш", который кластерный).


    Как в этом случае будет себя вести браузер при попытке установить The Great Suspender?
    а) Скажет, что "дополнение несовместимо"
    б) Установит, но оно не будет работать
    в) Установит, и оно будет работать неправильно / приведёт к падению
    г) Другое


    1. BarakAdama
      02.09.2016 15:47

      Оно установилось и как-то даже работало. Но не факт, что так, как надо :) Нужно детально исследовать.

      Если дополнение заведомо использует API, которые мы не поддерживаем, то оно просто не установится.


  1. nikitastaf1996
    02.09.2016 15:20
    -3

    Прекрасный новость.Но yandex.Я как то застрял в google экосистеме.


  1. watashiwaale
    02.09.2016 15:37

    Заголовок целиком и полностью правдив — поддержки расширений для Chromium и правда в мобильных браузерах не было. А вот мобильный Firefox вполне неплохо поддерживает аддоны от десктопного (с небольшими изменениями, видимо, но не суть) с самого начала.


  1. Lordbl4
    02.09.2016 15:37
    +5

    ЯБ научился запускать расширения — научатся и другие, и это здорово.


  1. modos189
    02.09.2016 15:51
    -1

    Ну не факт, что ПЕРВЫЙ мобильный браузер с поддержкой Chromium расширений. Как известно, не так давно в Firefox была добавлена поддержка WebExtentions, а в недавней статье описано, как с помощью специального дополнения можно устанавливать Chromium расширения. Правда, в мобильной версии Firefox не отображаются иконки Chromium расширений, но работающие сами по себе расширения вполне могли бы работать.


    1. BarakAdama
      02.09.2016 15:53
      +1

      Это все же портирование, а не прямая установка.


      1. modos189
        02.09.2016 15:58
        -1

        С одной стороны — да. С другой — в процессе конвертирования по сути только меняются несколько строк в манифесте и перепаковывается в тот же zip архив, переименованный в другое разрешение.


  1. brainunit
    02.09.2016 16:40

    BarakAdama, у вас на сайте есть анонс этой фичи? Если есть на английском, будет замечательно.


    1. pda11111
      02.09.2016 22:22

      В принципе есть Readme на Github


  1. JustPeople
    02.09.2016 17:39

    Судя по набору, расширений в браузере, автор что-то замышляет.


  1. damat
    02.09.2016 23:36
    +1

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


    1. BarakAdama
      03.09.2016 08:18
      +1

      Мы даже сделали его. Потом нашли проблемы и ушли переосмысливать идею.


      1. damat
        03.09.2016 16:11
        +1

        Да, читал, но так на Андроиде и не увидел в хоть как-то работающем виде. Но почему-то у Dolphin, если все правильно помню, все давно получилось. До сих пор помню, как года четыре назад загрузил простым релоадом в аэропорту 15 страниц случайных цитат баша, и читал их потом на борту.


  1. commandasombra
    03.09.2016 08:05

    Хорошо бы что бы Anonymox стал работать на мобильных браузерах…


  1. MikeGav
    03.09.2016 11:41

    Свои наработки вернули в upstream?


    1. BarakAdama
      03.09.2016 12:35
      +1

      Чтобы что-то «вернуть», надо чтобы с той стороны захотели их принять, т.е. чтобы в Google поменяли свои планы на Chrome. Это что касается расширений. А вообще мы апстримим, конечно же. Вот хороший пример.


  1. migs911
    03.09.2016 12:27
    +1

    Даже скачаю ради этого альфу! Надеюсь она не очень глючит)


  1. Varkus
    03.09.2016 13:08
    +4

    Если кликаю крестик на рекламе гугла меня вежливо спрашивают что не понравилось, отвечаю, мне не сложно.
    Если кликаю крестик на рекламе яндекс открывается новая вкладка, КАРЛ!!! Я не знаю что на этой вкладке яндекс от меня хочет, потому что сразу её закрываю и такие рекламные блоки сразу в банерорезку.


  1. lostmsu
    04.09.2016 04:20
    -2

    Firefox


  1. spmbt
    04.09.2016 05:26
    +1

    Шаг, действительно, значимый, потому что до сих пор вообще расширения в мобильных поддерживал Firefox Mobile, да и то лишь отдельные расширения для мобильных браузеров (если у разработчика дошли руки его сделать).

    Для Dolphin пишут тоже собственные дополения — http://www.dolphin-browser.com/android/addons/index.html?from=mobile_official_website&l=en_US, годящиеся для этого браузера.


  1. riget09
    04.09.2016 19:58

    Мобильная версия FireFox давно поддерживает расширения.


    1. BarakAdama
      04.09.2016 20:00

      Никто с этим не спорит. Мобильный Firefox поддерживает свои мобильные расширения. Dolphin поддерживает свои мобильные расширения. А Яндекс.Браузер поддержал установку десктопных расширений для Chromium.


  1. Methos
    06.09.2016 21:48

    Наконец-то!


    1. Methos
      06.09.2016 22:32

      Моё расширение nnru отлично работает! Спасибо громадное.

      Правда, не влазит на экран, поэтому впереди много работы по стилизации.


      1. BarakAdama
        07.09.2016 06:53

        Для больших попапов мы хотим скролл добавить.


        1. Methos
          07.09.2016 23:29

          Баг. Отчего-то в поле ввода текста не всплывает клавиатурка.