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 по умолчанию доступны два языка — американский английский и соответствующий языку локализации браузера; другие языковые пакеты можно скачать и установить непосредственно из окна настроек. Для применения выбранного языка интерфейса требуется перезапуск браузера.

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