Первый мобильный браузер с поддержкой расширений для Chromium. Новая альфа Яндекс.Браузера

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

imagebb7449e32de44feeaa0c1df985d57e28.png

Первые дополнения появились в Internet Explorer еще в 1999 году и за следующее десятилетие практика открытия доступа к API стала обязательной для любого более-менее популярного браузера. Сейчас многие из нас не представляют себе работу за компьютером без возможности добавить в браузер необходимую функцию собственными руками. А вот с Android пока еще все не так. Несмотря на рост производительности современных мобильных устройств, браузерные расширения на Android — скорее исключение, чем правило.

Мобильные браузеры не всегда воспринимались пользователями всерьез. Во времена медленного интернета и слабых мобильных устройств люди предпочитали решать свои задачи с помощью компьютера. Сейчас их отношение постепенно меняется. Нас все чаще просят добавить в продукт специфичные функции и инструменты. Что-то из этого мы встраиваем в Яндекс.Браузер (например, режим чтения и переводчик). Но многие из запросов было бы логично решить с помощью сторонних дополнений, а не перегружать Браузер. Добавим к этому традиционную просьбу поддержать дополнения на Android, которую достаточно часто присылают через обратную связь. В общем, мы стали не закрывать глаза на изменения вокруг и приступили к разработке.

Поддержать дополнения в браузере на Android можно двумя способами. Можно предусмотреть API, с которым бы работали другие приложения из Google Play. Эта практика уже многим знакома: например, кодеки для видеоплееров зачастую распространяются в виде отдельных приложений. Мы и сами нечто подобное совсем недавно сделали с блокировкой рекламы. У этого подхода есть два больших минуса: отсутствие дополнений на старте и необходимость создавать свой велосипед, который был бы несовместим с дополнениями для настольной версии браузера. А нам бы хотелось, чтобы люди могли использовать на Android те же инструменты, к которым они привыкли на компьютере.

В чем заключается второй способ, вы уже догадались. Расширения для Chrome и других браузеров на основе Chromium появились в начале 2010 года, и тысячи разработчиков со всего мира в течение всех этих лет создавали собственные инструменты. Яндекс.Браузер, несмотря на функциональные отличия, также основан на Chromium и поддерживает установку дополнений на компьютере. И вполне логично в этой ситуации распространить поддержку еще и на Android. До нас этого никто не сделал, но какие тут могут быть сложности, ведь на Windows все работает?

a9f192256be94dd3b2a4b580492814ad.png

Сначала может показаться, что все проблемы в отсутствии интерфейса для дополнений. Этого кода и правда нет в проекте, но мы изначально использовали собственный интерфейс, поэтому так нам было даже проще. Но нарисовать интерфейс — это капля в море, основные трудности связаны не с ним.

Когда мы попробовали собрать Яндекс.Браузер для Android с флагом enable_extensions, то получили порядка 600 ошибок совместимости. Флаг включения расширений, как и отвечающий за них код, был до мозга костей завязан на специфичное для десктопа окружение. Небольшой пример для любопытных разработчиков. Возьмем объект Browser. Browser — центральный контроллер UI десктопного браузера. Он содержит много чего интересного, в том числе модель TabStripModel, которая активно используется дополнениями для работы с вкладками. Но под Android все это не собирается. Мы начинаем тянуть за одну нить, а вытягиваем целый ворох несовместимостей. И так на каждом шагу.

Платформа расширений за 6 лет обросла большим количеством API. И у каждого из них могут быть десятки методов со своей непредсказуемой работой на Android. Поэтому для начала мы поддержали наиболее востребованные возможности, которых вполне достаточно для того, чтобы уже в альфе заработали такие дополнения, как Evernote, LastPass, Ghostery, SaveFrom.net, Tampermonkey, Яндекс.Погода и многие другие. Кстати, с этим нам помогли разработчики популярных дополнений, которых примерно месяц назад мы пригласили на закрытое тестирование ранних сборок. Чтобы им было проще ориентироваться в наших возможностях, мы написали диагностическое расширение, которое формирует наглядный отчет.

1c94f26ae15e441691efcc61845f3958.png604182f395a9482f8752e3db37d8c233.png

Что касается источников дополнений, то тут мы традиционно не ограничиваем людей каким-то одним каталогом и поддерживаем установку из Chrome Web Store, Opera Addons, собственного раздела рекомендованных дополнений, по inline-ссылкам или просто из каталога на SD-карте.

ee27b45f89ac4313aa282391c758fd18.png76f8a3fdaf3f415b8212970d4109a7cd.png

В заключение несколько слов о безопасности. Наша реализация дополнений на Android полностью соответствует общепринятой модели, т.е. дополнения работают в «песочнице» и изолированы как от остальной части браузера, так и от операционной системы. К тому же, как и на десктопе, мы умеем блокировать известные вредоносные разработки.

Установить альфа-версию Яндекс.Браузера можно из Google Play. После второго холодного запуска (особенность альфы) в настройках вы найдете целый раздел, посвященный дополнениям. Мы были бы благодарны сообществу Хабра за отзывы и идеи.

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

© Habrahabr.ru