Firefox 72

Встречаем новогодний Firefox 72.

CSS

  • Поддержка функциональности CSS Shadow Parts, куда входят атрибут part и псевдо­элемент ::part, позволяющие делать отдельные элементы внутри поддерева Shadow DOM доступными для оформления с помощью стилей страницы, на которой компонент используется.
  • Поддержка функциональности CSS Motion Path, позволяющей в рамках CSS-анимаций перемещать элементы по произвольной траектории, заданной SVG-кривой в свойстве offset-path. Сопутствующие свойства:

    • стенографическое (shorthand) свойство offset;
    • offset-anchor для выравнивания элемента относительно траектории;
    • offset-distance для указания положения элемента по длине траектории;
    • offset-rotate для поворота элемента относительно ориентации по умолчанию.
  • Поддержка самостоятельных свойств scale, rotate, translate для масштабирования, поворота и смещения элементов соответственно. Свойства независимы от свойства transform и призваны упростить использование соответствующей функциональности.

JavaScript

  • Поддержка краткого тернарного оператора ?? (nullish coalescing operator). Оператор возвращает левый операнд, если он не равен null и не является неопределённым (undefined), и правый операнд — в противном случае. Например, следующие выражения эквивалентны:

    'undefined' === typeof a || null === a ? 'foo': a

    a ?? 'foo'

    Возможность также доступна в Chrome 80+ и Safari TP 89+.

  • Поддержка событий FormDataEvent, возникающих при отправке формы или вызове конструктора FormData() и призванных упростить получение данных формы, если необходимо отменить их обычную отправку и обработать иным способом — например, отправить на сервер без перезагрузки страницы.
  • Вызов методов Notification.requestPermission() (запрос согласия пользователя на получение уведомлений) и PushManager.subscribe() (подтверждение подписки на Push-уведомления) теперь разрешён только в обработчиках событий, являющихся результатом действий пользователя — например, щелчка мышью (click). Благодаря этому исключаются назойливые служебные всплывающие окна, которые ранее могли открываться сразу после загрузки веб-страницы.

    Аналогичное ограничение введено для метода MediaDevices.getDisplayMedia(), запрашивающего согласие пользователя на снятие скриншота или видеозахват определённой области экрана.

Расширения

Обработка клавиш-модификаторов и среднего щелчка на кнопках расширений

Для кнопок расширений browserAction и pageAction теперь возможна обработка щелчка средней кнопкой мыши и клавиш-модификаторов Shift/Ctrl/Alt. Соответствующие данные передаются в виде объекта во втором аргументе функции обратного вызова обработчика onClicked.

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

UsableHomeButton 2.5

Благодаря этой возможности, например, функциональность авторского расширения UsableHomeButton в свежей версии 2.5 наконец удалось восстановить почти до уровня изначальной XUL/XPCOM-версии:

  • при нажатии кнопки расширения с зажатой клавишей Ctrl главная страница текущего сайта открывается в новой вкладке;
  • при зажатой Shift — в новом окне;
  • при зажатой Alt текущая страница открывается в приватном окне;
  • меню UsableHomeButton по умолчанию открывается средним щелчком; есть возможность поменять местами функциональность левой и средней кнопок мыши с помощью настроек расширения;
  • нажатие кнопки расширения без клавиш-модификаторов по-прежнему по умолчанию открывает главную страницу текущего сайта.

UsableHomeButton исполнилось 11 лет.

Прочее

  • Отключение определения типа документа по его содержимому (MIME sniffing) с помощью заголовка ответа сервера X-Content-Type-Options теперь применяется и к документам верхнего уровня, для которых указан тип содержимого (Content-Type). Это может приводить к скачиванию веб-страницы вместо её отображения, если в её заголовке Content-Type указан MIME-тип, отличный от text/html.

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