Веб-браузеры — это современная операционная система. Chrome OS от Google, операционная система, работающая исключительно с браузером Chrome, сейчас является второй по популярности настольной операционной системой. Кроме того, появление Электрона и подобных кроссплатформенных фреймворков означает, что многие из приложений, которые мы используем каждый день (например, Slack), на самом деле являются замаскированными браузерными приложениями.

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

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

Отказ от ответственности №2. Если я сделаю какие-либо ошибки или упущу что-то, что вы считаете важным, сообщите об этом в комментариях. Поскольку я лично мало знаком с браузерами в неанглоязычных странах, в этом посте, несомненно, будут пробелы.

Потребительские веб-браузеры (1993–)

Вначале был браузер WorldWideWeb Тима Бернерса-Ли (1990). Однако Mosaic Марка Андриссена (1993) был первым браузером, получившим широкую популярность, поскольку он был прост в установке, отображал графику и обеспечивал поддержку клиентов. Затем Андреессен запустил Netscape, который должен был сразиться с Internet Explorer (впервые выпущенным в 1995 году) за доминирование в браузерных войнах конца 90-х. Браузерные войны завершились тем, что Microsoft столкнулась с антимонопольным иском из-за интеграции Internet Explorer и Windows.

Плагины (1995–2015 гг.,даже)

Ранняя сеть поддерживала только статический контент. Плагины — нативные исполняемые файлы, отображающие динамическое содержимое в браузере, — открыли двери для мультимедиа, корпоративных приложений и игр. Internet Explorer поддерживал подключаемые модули через свою технологию ActiveX, в то время как другие браузеры поддерживали NPAPI.

Со стороны потребителя вы практически не могли просматривать веб-страницы без установки плагинов Flash (1996 г.) и Java (1998 г.).

Плагины, как собственные исполняемые файлы, были хроническим источником уязвимостей и нестабильности системы безопасности. Несмотря на эти проблемы, только после принятия стандарта HTML5 и современных веб-API в 2014 году браузеры могли избавиться от подключаемых модулей без ущерба для функциональности.

Настольные браузеры начали отказываться от поддержки плагинов в 2015 году, и Chrome лидирует. На мобильных устройствах iOS (2003 г.), как известно, с самого начала не предлагала Flash.

Подключаемый модуль Flash долгое время оставался без внимания из-за повсеместного распространения Flash-контента. Firefox, например, отказывался прекращать поддержку Flash до начала этого года.

Пользовательские таблицы стилей (1998–2019 гг.)

В связи с наличием на рынке множества браузеров и растущими несовместимостями при отображении сайтов Тим Бернерс-Ли в 1994 году основал консорциум World Wide Web (W3C) для разработки стандартов для разных браузеров.

Одним из таких стандартов была спецификация Cascading Style Sheets (CSS) 1996 года. CSS определяет поддержку «таблиц стилей», которые сообщают браузеру, как стилизовать содержимое на странице. Таблицы стилей могут поступать из трех разных источников:

  • Автор документа: Автор сайта
  • Пользователь: пользователь браузера
  • Пользовательский агент: стиль по умолчанию для пользовательского агента (т. е. браузера).

В 1998 году Opera 3.5 стала первым браузером с поддержкой CSS и включила поддержку пользовательских таблиц стилей. Internet Explorer последовал этому примеру, выпустив Internet Explorer 4 в 1999 году.

В 2005 году, с появлением Stylish extension Джейсона Барнабе, потребительский стиль начал переходить к браузерным расширениям менеджера стилей. По сравнению с пользовательскими таблицами стилей менеджеры стилей предлагают более гибкие элементы управления, функции совместного использования и простоту использования.

Chrome прекратил поддержку пользовательских таблиц стилей в 2014 году. Firefox по-прежнему поддерживает таблицу стилей userContent.css, но пользовательские таблицы стилей недоступны из основного интерфейса с 2019 года.

Исправление от 05.06.2021. Safari по-прежнему поддерживает пользовательские таблицы стилей на вкладке Дополнительно в настройках. Вот история пользовательских таблиц стилей в Safari

Букмарклеты (1998–)

Брендан Эйх и Netscape представили миру JavaScript в 1995 году. JavaScript — это язык программирования, который авторы веб-сайтов могут использовать для создания динамического контента и интерактивных пользовательских интерфейсов.

JavaScript также открыл новые возможности для настройки браузера: букмарклеты. Букмарклеты — это небольшие фрагменты JavaScript, содержащиеся в закладке, которая начинается с javascript:. Когда вы нажимаете на закладку, он запускает JavaScript в контексте страницы, возможно, загружая больше JavaScript из другого источника.

Например, вот букмарклет, который открывает исторические версии страницы в Wayback Machine интернет-архива:

javascript:void(window.open('https://web.archive.org/web/*/'+location.href.replace(/\/$/, '')));

Букмарклеты столкнулись с проблемой в 2004 году, когда была введена спецификация Content Security Policy (CSP) W3C. Разработанный для защиты сайтов от вредоносного пользовательского контента и стороннего кода, CSP позволяет владельцам сайтов блокировать источники кода и сетевые запросы.

Однако, стремясь к основной расширяемости, Спецификация CSP указывает, что букмарклеты и другие функции расширяемости должны быть освобождены от ограничений CSP:

Политика, применяемая к ресурсу, НЕ ДОЛЖНА мешать работе функций пользовательского агента, таких как надстройки, расширения или букмарклеты. Такие функции обычно повышают приоритет пользователя над авторами страниц, как это предусмотрено в [HTML-DESIGN].

На практике все обстоит иначе. В Firefox букмарклеты подчиняются CSP сайта, что предотвращает запуск букмарклетов на многих страницах. В Chrome букмарклеты не подлежат CSP. Но по умолчанию Chrome показывает закладки только на странице Новые вкладки; пользователи должны настроить отображение панели закладок на веб-страницах.

Расширения браузера (1999–)

Современный подход к расширению браузера, расширениям браузера, начался в 1999 году, когда Internet Explorer добавил поддержку в Internet Explorer 4. Новые расширения поддерживали панели проводника (то есть панель инструментов) и добавляли записи в контекстные меню.

Расширения браузера, также иногда называемые надстройками, поддерживают модификацию интерфейса браузера, модификацию пользовательского интерфейса веб-страницы и запуск JavaScript в контексте веб-страницы. В наши дни браузерные расширения поддерживают широкий спектр вариантов использования, от помощи по написанию и веб-купонов до блокировки рекламы.

Firefox был запущен с поддержкой расширений в 2004 году, другие популярные браузеры последовали его примеру в 2009–2010 годах. Еще в 2005 году страница Mozilla Update была полна активности:

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

К сожалению, поскольку расширения браузера имеют доступ к действиям пользователя в Интернете, они представляют собой привлекательный вектор атаки для злоумышленников.

Чтобы пресечь злоупотребления, Chrome, в частности, предпринял шаги по ограничению распространения расширений браузера. В 2014 году Chrome ввел ограничения, чтобы пользователи Windows могли устанавливать расширения только из интернет-магазина Chrome.

Mozilla XUL (1997–2017)

Пользовательский интерфейс Mozilla и Firefox был реализован с использованием языка под названием XUL, языка пользовательского интерфейса XML. XUL определяет пользовательский интерфейс, отображаемый на лету.

В Firefox расширения браузера могут изменять XUL, что позволяет им изменять основные части пользовательского интерфейса (например, добавлять панели инструментов).

Firefox прекратил использование XUL для расширений в 2017 году, потому что это приводило к уязвимостям и нестабильности, когда несколько расширений изменяли UX. Технические пользователи по-прежнему могут вносить ограниченные изменения в интерфейс Firefox через его файл настроек userChrome.css.

Альтернативные дистрибутивы браузеров (2004–)

Браузер Netscape был открыт в 1998 году и использовался для создания набора браузеров Mozilla. Впоследствии в 2004 году был выпущен Mozilla Firefox, первый массовый браузер с открытым исходным кодом.

В 2008 году Google выпустил проект браузера Chromium с открытым исходным кодом. Google использует Chromium в качестве основы для своего веб-браузера Chrome. Будучи открытым исходным кодом, разработчики могут «разветвлять» браузер, модифицировать его и распространять свои собственные версии.

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

  • GNU IceWeasel/IceCat (2005–): дистрибутив Firefox без проприетарных плагинов.
  • Flock (2005–2011): Браузер со встроенными функциями социальных сетей. Первоначально основанный на Firefox, а затем на Chromium. Был куплен Zynga, компанией по производству социальных игр.
  • Tor Browser Bundle (2008–): дистрибутив Firefox, который использует сеть Tor для частного просмотра.
  • Brave (2016–): Браузер Chromium Брендана Эйха (известного благодаря JavaScript) с разделением доходов создателей контента через криптовалюту Basic Attention Token.
  • Microsoft Edge (2019–): Браузер Microsoft на основе Chromium после сбоя их собственного браузера (также называемого Edge).

Пользовательские скрипты (2005–)

Пользовательские скрипты — это небольшие скрипты, которые изменяют веб-страницу. Как и расширения для браузера, они обычно пишутся на JavaScript. Однако пользовательские скрипты легче, поскольку вам не нужно их упаковывать и распространять через интернет-магазин браузера. Вместо этого для запуска пользовательских скриптов и управления ими вы используете расширение браузера, удачно называемое менеджером пользовательских скриптов.

Пользовательские скрипты имеют много преимуществ по сравнению с букмарклетами: они могут автоматически запускаться на странице, не имеют ограничений по длине и могут выполняться вне CSP сайта.

Первый менеджер пользовательских скриптов Greasemonkey был выпущен для Firefox в 2005 году. Сейчас на выбор есть несколько вариантов, включая Tampermonkey (2010) и Violentmonkey (2013). Все эти варианты используют одни и те же сценарии в стиле Greasemonkey.

В 2019 году Firefox добавил официальную поддержку пользовательских скриптов в расширениях, предоставив дополнительные гарантии безопасности. Chromium имеет отдельную функцию песочницы для изолированного запуска кода, но не имеет формальной поддержки пользовательских сценариев. Однако, как я затрону чуть позже, конец пользовательских скриптов в браузерах Chromium близок.

Конвергенция с API WebExtensions (2017–)

Отказавшись от расширений на основе XUL в 2017 году, Firefox переключился на де-факто стандартный API WebExtensions, в целом имитируя API Chromium.

Изменение Firefox означает, что подавляющее большинство расширений браузера теперь используют API, определенные в манифесте Chrome версии 2, впервые выпущенном еще в 2012 году (хотя с тех пор были введены дополнительные дополнительные функции API).

Из-за уменьшающейся доли рынка Firefox решил поддерживать пространство имен chrome API в дополнение к пространству имен browserAPI, не зависящему от поставщика. Во многих случаях расширения Chrome могут быть перенесены в Firefox без изменения кода. Firefox также предоставляет полифилл для разработчиков, позволяющий сделать их независимый от производителя код совместимым с Chrome.

Написание расширений для Safari традиционно включало написание их с использованием инструментов разработки Apple XCode. Начиная с Safari 14 в 2020 году, Safari также принял WebExtensions API.

Манифест V3 (2021–)

В январе 2021 года Chrome выпустил неоднозначную версию манифеста 3 (V3) API-интерфейсов WebExtensions. «Манифест» относится как к точкам технической интеграции, так и к политикам, которые Chrome применяет при просмотре расширений для своего Интернет-магазина Chrome.

В соответствии с предыдущими изменениями API браузера заявленными целями Manifest V3 являются безопасность, скорость и надежность. Основные изменения, внесенные в Manifest V3:

  • Декларативное изменение сетевых запросов (скорость/безопасность)
  • Использование сервис-воркеров для фоновых операций по сравнению с постоянной фоновой страницей (надежность)
  • Запрет удаленно размещенного кода JavaScript, распространенный вектор уязвимостей безопасности (безопасность)

Manifest V3 вызывает споры в сообществе разработчиков расширений для браузеров, поскольку нарушает функциональность многих популярных расширений.

Для широкой публики больше всего беспокоит то, что популярный контент и блокировщики рекламы (например, uBlock Origin и Privacy Badger) больше не будут поддерживаться. Эти блокираторы работают, поддерживая большой набор правил для блокировки сетевых запросов. Такие большие и динамичные наборы правил не поддерживаются в Manifest V3. (Честно говоря, в ответ на возмущение команда Chrome увеличила количество правил для каждого расширения.)

Кроме того, менеджеры пользовательских сценариев по своему определению работают, позволяя пользователям устанавливать и запускать удаленный код JavaScript. На данный момент даже пользовательский код не будет поддерживаться Chrome после прекращения поддержки Manifest V2 (вероятно, в 2022 году).

Будущее: сборщики расширений браузера без/с малым кодом (2021–)

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

  • Менеджеры стилей (2005–): настройка стиля страницы.
  • Менеджеры пользовательских скриптов (2005–2022?): автоматически запускать пользовательский код.
  • Контент/блокировщики рекламы (2002–): Блокируют сетевые запросы и элементы.
  • Менеджеры контекстного меню (?–): добавление элементов контекстного меню (например, динамическое открытие нового URL-адреса на основе выделенного текста).
  • Веб-клипперы (?–): вырезают информацию со страницы; настроить то, что обрезается и куда оно отправляется.

Несмотря на количество опубликованных расширений (Интернет-магазин Chrome насчитывает 189 000 расширений), остается еще много места для инноваций. В частности, сочетание достижений в области отсутствия кода + API-фикации с расширениями браузера может значительно повысить производительность и самоэффективность потребителей.

Чтобы реализовать это видение, я основал PixieBrix. В PixieBrix мы работаем над созданием расширения для браузера с открытым исходным кодом, которое позволит потребителям и компаниям настраивать их работу в Интернете в соответствии с тем, как они работают. PixieBrix не требует кода или требует минимального кода — вы настраиваете и комбинируете кирпичики, чтобы добавить недостающие функции, интегрировать сайты без API и автоматизировать повторяющиеся задачи.

Лично я очень взволнован всплеском интереса к этому пространству. Один известный стартап, с которым я столкнулся, — это Insight Browser, браузер для iOS, который позволяет пользователям создавать простые расширения и делиться ими. В корпоративном мире Extension.dev — это еще один сборщик внутренних корпоративных расширений с низким кодом (ознакомьтесь с подробной страницей Какие внутренние расширения создают люди?).

Если вы заинтересованы в работе или инвестировании в это пространство, я буду рад услышать от вас. Хотите следовать за нами в нашем путешествии? Подпишитесь на нас в Twitter, отметьте наш репозиторий на GitHub или подпишитесь на нашу рассылку.