Safari Web Extensions: чего ожидать пользователям блокировщиков контента в Safari от новой инициативы Apple
Суть коротко: Safari перенял наиболее популярный и широко используемый API браузерных расширений, но лишь после того, как убрал оттуда кучу возможностей, связанных с блокировкой контента. В его текущей форме этот API бесполезен для разработчиков блокировщиков рекламы, и только время покажет, поменяется ли ситуация к лучшему.
В данный момент Apple активно разрабатывает следующую версию Safari, которая появится в macOS Big Sur. Большинство изменений уже можно увидеть и протестировать в официальной бете Safari 14, а для пользователей блокировщиков рекламы наибольший интерес представляет поддержка WebExtensions.
Но что же такое WebExtensions? Это API (т.е. application programming interface — интерфейс прикладного программирования) для разработки браузерных расширений, которые могут менять поведение и внешний облик вашего браузера. Многие популярные браузеры, такие как Chrome, Mozilla, Edge, поддерживают WebExtensions API, но Safari всегда стоял особняком и требовал от разработчиков использовать другой набор API. Из-за этого портирование браузерного расширения из, Chrome в Safari, например, требует больших усилий, и многие разработчики не располагают ресурсами для этого. В результате, Safari недосчитывается множества расширений, которые доступны для пользователей других браузеров.
В этом июне на Всемирной Конференции Разработчиков (Worldwide Developers Conference, WWDC2020) Apple заявили, что Safari 14 будет поддерживать WebExtensions. Для многих разработчиков это стало приятных сюрпризом. Мы поддерживаем это решение, как и все остальные; однако, в отношении блокировщиков в Safari поменяется очень немного, и вот почему.
В 2015-м году Safari представил так называемый Safari Content Blocking API. Из названия понятно, что его предназначение — помогать разработчикам создавать расширения для блокировки контента в Safari. AdGuard тоже использует этот API: в AdGuard для iOS, AdGuard Pro для iOS и AdGuard для Safari. В сравнении с WebExtensions этот API имеет ряд серьёзных недостатков: он ограничен в возможностях и практически не развивается. Тем не менее, его всё же хватает для обеспечения приемлемого уровня блокировки.
Так, но ведь теперь всё будет иначе, верно? И мы, конечно же, портируем наше расширение для Chrome/Firefox в Safari? К сожалению, нет. Этому препятствует несколько серьёзных проблем. Дело в том, что разработчики Safari не просто скопировали WebExtensions API. Часть функционала, предполагаемая WebExtensions, не будет доступна в Safari 14. К примеру, вы не найдёте там возможности блокировать веб-запросы. Можете попытаться: откройте официальную документацию и поищите термин "webRequest". Вот что вы найдёте:
webRequest
BlockingResponse not supported.
Blocking requests not supported.
Даже без технических знаний понятно, что это значит.
Так что же будет дальше? Есть ли шанс, что всё со временем поменяется к лучшему? Что ждёт блокировщики контента для Safari в будущем? Честно говоря, мы не имеем понятия.
С одной стороны, есть старый стагнирующий Safari Content Blocking API. Мы обращали внимание на огромное количество багов и сделали больше всяческих предложений по его улучшению, чем вы найдёте яблок под яблоней осенью. Все они игнорируются уже на протяжении многих лет. Из наших разговоров с разработчиками Apple мы сделали вывод, что они, в принципе, не против идеи рассмотреть нашу реализацию Safari Content Blocking API, если мы такую предложим. Но, разумеется, они не дают никаких обещаний на этот счёт, так что мы не особо торопимся; это очень много работы без какой-либо гарантии результата.
С другой стороны, теоретически они могут серьёзно отнестись к дальнейшей разработке WebExtensions API и со временем добавить возможность блокировать веб-запросы. Говоря откровенно, такой сценарий не кажется нам особенно вероятным. Но в то же время, никто изначально не ожидал объявления о поддержке WebExtensions на WWDC, так что всё возможно. Нам остаётся только ждать и верить.
А на данный момент у вас есть пара доступных вариантов:
- Установить AdGuard для Safari. Он выжимает максимум из того, что Safari Content Blocking API может предложить в плане блокировки контента.
- Установить AdGuard для Mac. Это премиум-продукт, и после истечения бесплатного пробного периода потребуется приобрести лицензию, но зато он просто смеётся в лицо любым ограничениям со стороны браузера. Он блокирует рекламу и трекинг лучше, чем любое браузерное расширение когда-либо сможет.