Firefox 65

Firefox 65 — юбилейный и первый в 2019 году выпуск свободного веб-браузера.

Медиа­форматы AV1 и WebP

  • Поддержка новейшего открытого видео­формата AV1 в Windows-версии Firefox. По характе­ристикам AV1 не уступает коммер­ческому H.265 (HEVC) и при этом не требует лицензионных отчислений. Формат разработала организация AOMedia, куда вошли в том числе компании Mozilla, Google, Cisco, Amazon, Netflix, AMD, ARM, Intel и nVidia.
  • Поддержка графического формата WebP, разработанного компанией Google и основанного на алгоритме кодирования ключевых кадров в видео­формате VP8. Параллельно соответ­ствующий MIME-тип image/webp добавлен в HTTP-заголовок запроса Accept, сообщающий серверу типы поддер­живаемых браузером файлов.

    Формат WebP поддерживает оба типа сжатия: без потерь (как PNG) и с потерями (как JPEG), но обес­печивает более высокую степень сжатия и при этом поддерживает полу­проз­рачность в обоих режимах. И если чистая степень сжатия в равных условиях по сравнению с прежними форматами улучшена лишь на 25%, то поддержка полу­проз­рачности совместно с JPEG-подобным сжатием даёт много­кратный выигрыш в скорости загрузки полу­проз­рачных изображений по сравнению с PNG без необ­ходимости использовать такие ограниченные и кропотливые обходные манёвры, как SVG- или CSS-маски.

CSS, HTML

  • Значение crisp-edges CSS-свойства image-rendering теперь доступно без префикса. Свойство пред­наз­начено для управления способом масштаби­рования изображений. Смысл значения crisp-edges в специ­фикации описан довольно расплывчато — как призванный сохранять контрастность и контуры без сглаживания или размытия, но в Firefox при его исполь­зовании применяется алгоритм «По соседним» («Ближайший сосед», Nearest Neighbour).

    Именно image-rendering: crisp-edges используется в авторском расширении SmartUpscale, предот­вра­щающем размытие изображений, отмасштаби­рованных с цело­чис­ленным коэффи­циентом, и особенно полезном для владельцев 4K-мониторов, использующих их при системном масштабе 200%.

  • Поддержка новых свойств break-before, break-after, break-inside. В отличие от ранее сущест­вовавших свойств page-break-*, пред­назна­чавшихся только для управления разрывами страниц, свойства break-* также позволяют управлять разрывами колонок (columns) и регионов (regions). Свойства page-break-* теперь функцио­нально идентичны соответ­ствующим свойствам break-* и являются их псевдо­нимами (aliases).
  • Поддержка значения anywhere свойства overflow-wrap. Значение anywhere аналогично значению break-word с той разницей, что вносимая первым возможность переноса текста учитывается при расчёте минимальной возможной ширины текстового содержимого элемента (min-content intrinsic size). overflow-wrap — стандарти­зированный вариант нестандартного свойства word-wrap, изначально реализо­ванного в браузере Internet Explorer и теперь являющегося псевдо­нимом overflow-wrap.
  • Поддержка новых значений jump-start, jump-end, jump-none и jump-both для управления пошаговыми (ступен­чатыми) анимациями и переходами (transitions) с помощью функции steps(). Одно­вре­менно удалена поддержка функции frames(), предназна­чавшейся для аналогичной цели ранее.
  • Поддержка дополни­тельных значений пре­фикси­рованного свойства -webkit-appearance для улучшенной совместимости с другими браузерами:

    • meter как псевдоним ранее сущест­вовавшего специфичного для Firefox значения meterbar;
    • progress-bar как псевдоним progressbar;
    • textarea как псевдоним textfield-multiline.

    Эти значения теперь также используются по умолчанию в собст­венных таблицах стилей Firefox для элементов METER, PROGRESS и TEXTAREA соответственно.

  • Поведение свойства user-select изменено для совместимости с другими браузерами:

    • user-select: all теперь не пере­опре­деляет значения свойства user-select вложенных элементов;
    • теперь возможно выделение в элементах, для которых отключено визуальное редакти­рование (contenteditable), вложенных в визуально-редакти­руемые элементы;
    • user-select теперь работает едино­образно внутри и за пределами Shadow DOM;
    • удалена поддержка нестандартных значений -moz-all, -moz-text, tri-state, element, elements и toggle.
  • Поддержка новой функции env(). В качестве аргумента функции поддер­живаются значения safe-area-inset-top, safe-area-inset-right, safe-area-inset-bottom и safe-area-inset-left, соответ­ствующие координатам прямо­угольной области, которая гаранти­рованно не будет перекрыта или усечена вследствие возможной непрямо­угольной формы экрана. В качестве второго аргумента функции можно указать fallback-значение, которое будет исполь­зоваться при отсутствии поддержки браузером ключевого слова из первого аргумента. Функцию env() можно использовать там же, где допустимо исполь­зование функции var().
  • Поддержка атрибута referrerpolicy и DOM-свойства referrerPolicy элемента SCRIPT для управления отправкой HTTP-заголовка запроса Referer при загрузке файла скрипта.

JavaScript, DOM

  • Некоторые события мыши, такие как mouseover, mouseenter, mousemove, mouseout и mouseleave, теперь работают на элементах форм, отключённых с помощью атрибута disabled.
  • Удаление атрибута src элемента IFRAME теперь приводит к загрузке во фрейм пустой страницы с псевдо-URL-адресом about:blank. Это соответствует поведению браузеров Chrome и Safari. Ранее удаление атрибута src в Firefox на содержимое фрейма не влияло.
  • Поддержка конструктора объектов Intl.RelativeTimeFormat, пред­назна­ченного для генерации локализо­ванного строкового пред­ставления дат в относительном формате. Например, 1 день назад.
  • Поддержка универ­сального глобального объекта globalThis, в браузерных реализациях JavaScript соответст­вующего объекту window. Это призвано упростить обеспечение возможности исполнения одного и того же JS-кода в разных контекстах — например, не только в браузере, но и в среде Node.js, где глобальный объект — global.
  • Функция createImageBitmap() теперь поддерживает векторные изображения SVG. Функция служит для создания растровых изображений в представлении, дающем возможность быстрой отрисовки средствами элемента CANVAS.
  • Макси­мальный размер JS-строк теперь составляет около 1 ГБ (2**30 - 2) вместо прежних 256 МБ (2**28 - 1).
  • Экспери­ментальная поддержка программного интер­фейса (API) Storage Access, дающего возможность встроенным с помощью фреймов ресурсам запрашивать у поль­зователя возможность сохранять локальные данные. API включает два метода hasStorageAccess() и requestStorageAccess() объекта document и новое разрешение allow-storage-access-by-user-activation в атрибуте sandbox элемента IFRAME.

    В зависимости от реализации решение о предо­став­лении доступа к хранению данных браузер принимает либо с помощью явного запроса при взаимо­действии пользователя с документом во фрейме, либо автоматически на основании прямого посещения пользователем соответст­вующего ресурса за определённый пред­шест­вующий период. Функциональность в Firefox по умолчанию выключена, включить можно с помощью параметра dom.storage_access.enabled на странице скрытых настроек, доступной по псевдо-URL-адресу about:config.

    Идею изначально предложил Джон Уайландер (John Wilander) из команды разработки движка WebKit, используемого в браузере Apple Safari.

Разработка

  • Flexbox Inspector — новый инструмент визуализации габаритов элементов при использовании механизма взаимного расположения элементов Flexbox. Включается наведением/щелчком по кнопке flex справа от открывающего тега элемента в панели DOM-дерева в панели «Инспектор» инструментов разработчика либо щелчком по пикто­грамме слева от значения flex или inline-flex свойства display в списке CSS-правил.
  • Изменения стилей, внесённые с помощью инструментов разработчика, теперь отображаются на вкладке «Изменения» в виде, подобном исполь­зуемому в системах управления версиями (VCS, SCM) типа Mercurial или Git.
  • Диспетчер задач Firefox, доступный по псевдо-URL-адресу about:performance, теперь показывает потребление памяти и процессорных ресурсов отдельными вкладками. К сожалению, первая строка таблицы пока загорожена фиксированной «шапкой».

Прочее

  • Возможность изменить язык интерфейса Firefox в настройках браузера без необходимости использовать отдельный локали­зованный дистрибутив. Это упрощает, например, проверку правильности локализации авторских расширений. В локали­зованных версиях Firefox по умолчанию доступны два языка — американский английский и соответ­ствующий языку локализации браузера; другие языковые пакеты можно скачать и установить непосредственно из окна настроек. Для применения выбранного языка интер­фейса требуется пере­запуск браузера.

См. также официальные примечания к выпуску и информацию для разработчиков.