Firefox 49

Первый осенний выпуск Firefox готов порадовать внушительным списком новшеств.

HTML

  • Поддержка HTML5-элементов DETAILS и SUMMARY, позволяющих создавать разворачиваемые блоки без использования JavaScript.
  • Поддержка значений allow-popups-to-escape-sandbox и allow-modals атрибута sandbox элемента IFRAME.

    • Значение allow-popups-to-escape-sandbox разрешает открытие новых окон без применения к ним тех же ограничений, которые имеют место для содержимого фрейма.
    • Значение allow-modals разрешает вставленному во фрейм документу открывать модальные окна.
  • Поддержка значений no-referrer-when-downgrade и origin-when-cross-origin атрибута referrerpolicy элементов A (ссылок).

    • Значение no-referrer-when-downgrade означает, что заголовок запроса Referer не будет отправляться при переходе на страницу, открываемую по протоколу, отличному от HTTPS, что соответствует поведению браузеров по умолчанию.
    • Значение origin-when-cross-origin означает, что при переходе на другие сайты заголовок Referer будет содержать только адрес корня домена (протокол, домен и порт), а при переходах между страницами текущего домена Referer будет включать полный адрес страницы.
  • Удалена поддержка атрибута form элемента LABEL в соответствии с изменениями в спецификации HTML. DOM-свойство form по-прежнему поддерживается, но теперь является псевдонимом свойства control.form и возвращает форму, к которой относится поле формы, на которое указывает LABEL.

CSS

  • Долгожданная поддержка свойств background-position-x и background-position-y, позволяющих задавать сдвиг фонового изображения раздельно по горизонтальной и вертикальной осям соответственно. Эти свойства долгое время были нестандартным расширением стандарта, доступным в IE и браузерах на основе движков WebKit и Blink, пока в апреле 2014 года рабочей группой CSS наконец не было принято решение об их стандартизации.
  • Поддержка значений space и round свойства background-repeat.

    • Значение space позволяет отобразить максимально возможное количество копий изображения без их усечения, при этом крайние копии вплотную прилегают к краям элемента, а свободное пространство равномерно распределяется по промежуткам между копиями изображения.
    • Значение round позволяет замостить элемент отмасштабированными в некоторых пределах копиями изображения без зазоров между ними.
  • Включена по умолчанию поддержка значения text свойства background-clip, превращающего текст в маску для фона элемента, ранее экспериментально реализованная в Firefox 48.
  • Поддержка указания цветовых значений с прозрачностью с помощью шестнадцатеричной нотации вида #RRGGBBAA, #RGBA.
  • Функциональный псевдокласс :dir() теперь доступен без префикса. В отличие от селектора по атрибуту [dir=…], псевдокласс учитывает направление текста, унаследованное от одного из элементов-предков, в то время как непосредственно адресуемый элемент может этого атрибута не иметь.
  • Поддержка единицы q, эквивалентной четверти миллиметра (mm).
  • Свойство text-align-last, позволяющее управлять выравниванием последней строки текста, теперь доступно без префикса.
  • Поддержка свойства overflow-wrap как стандартного эквивалента нестандартного, но широко поддерживаемого свойства word-wrap, изначально реализованного в браузере Internet Exporer. Последний теперь позиционируется как псевдоним первого.
  • Упразднена about:config-настройка layout.css.text-emphasis.enabled, отвечавшая за доступность свойств семейства text-emphasis, включённых по умолчанию начиная с Firefox 46. Таким образом, поддержку этих свойств в Firefox теперь невозможно отключить.
  • С целью улучшения совместимости Firefox с сайтами, созданными в расчёте на браузеры на основе WebKit (Safari), добавлена поддержка множества свойств с префиксом -webkit- в качестве псевдонимов соответствующих стандартных свойств. Затронутые свойства в том числе касаются Flexbox, Transitions, трансформаций и градиентов. Кроме того, реализованы некоторые нестандартные возможности, в частности: -webkit-text-stroke (обводка для текста) и -webkit-text-fill-color (аналог свойства color, имеющий более высокий приоритет и изначально предназначенный для использования совместно с -webkit-background-clip с целью обеспечения читабельности текста в браузерах с поддержкой и без поддержки -webkit-background-clip).

JavaScript, DOM

  • Удалена поддержка программного интерфейса (API) для доступа к Microdata-данным средствами JavaScript. Из браузерных движков Blink и WebKit такая поддержка была удалена ранее, в Safari данная возможность никогда не была включена по умолчанию, а в IE поддержки не было вовсе. Следует отметить, что использование Microdata-разметки, предназначенной для поисковиков, смысла при этом не теряет.
  • Удалена поддержка нестандартного и нерекомендуемого параметра flags методов match(), search() и replace объекта String.
  • Поведение метода Date.parse() при разборе двузначных лет в датах формата mm/dd/yy было изменено для единообразия с браузерами Chrome (Blink) и Safari (WebKit) несмотря на то, что в IE и Edge разбор работает аналогично прежнему алгоритму Firefox.
  • Поддержка метода DOMTokenList.supports(), призванного дать возможность определения легитимности заданной подстроки как одного из значений в рамках заданного атрибута.
  • Поддержка метода DOMTokenList.replace(), предназначенного для замены одного значения списка DOMTokenList на другое.
  • Ведущий вопросительный знак в значении параметра конструктора URLSearchParams() теперь игнорируется в соответствии с изменением в спецификации URL.
  • Свойство Document.visibilityState теперь возвращает значение prerender, если страница находится в состоянии предварительной отрисовки и ещё не видна пользователю.
  • Реализованы DOM4-методы before(), after() и replaceWith() дочернего узла и append() и prepend() родительского узла, призванные упростить на уровне синтаксиса вставку узлов до или после заданного узла, замену заданного узла, вставку узлов перед существующими дочерними узлами заданного элемента или после них соответственно.
  • В окнах, открываемых с помощью метода window.open(), теперь по умолчанию доступны полосы прокрутки.
  • Экспериментальная поддержка нестандартного метода HTMLMediaElement.seekToNextFrame() для сдвига текущей позиции воспроизведения медиафайла на один кадр вперёд. Для аудиофайлов в качестве кадра, вероятно, выступает отдельный отсчёт (sample) дискретизации. По умолчанию возможность отключена, включается about:config-параметром media.seekToNextFrame.enabled.
  • Поддержка передачи сразу нескольких параметров как объекта в качестве третьего аргумента метода addEventListener(), а именно:

    • параметр с ключом capture соответствует прежнему назначению (useCapture) третьего параметра метода;
    • параметр once позволяет автоматически удалить обработчик после его первого вызова;
    • passive сообщает браузеру, что в функции обратного вызова не будет вызова метода preventDefault() (если такой вызов всё-таки будет, он будет проигнорирован), что может положительно сказаться на быстродействии, в частности, в обработчиках события прокрутки.

    Следует учитывать, что браузеры без поддержки такой возможности будут трактовать такой объект как аргумент useCapture со значением true.

  • Включена по умолчанию поддержка свойства CanvasRenderingContext2D.filter, позволяющего задать ряд фильтров, которыми следует обрабатывать изображение, генерируемое в рамках соответствующего элемента CANVAS — например, blur() (размытие), brightness() и contrast() (изменение яркости и контрастности), grayscale() (управление насыщенностью цветов — от цветного до чёрно-белого).
  • Для объекта Response, определённого в Fetch API, теперь доступно свойство redirected, по которому можно определить, было ли осуществлено перенаправление (редирект) соответствующего запроса.
  • Исправлена ошибка, из-за которой вызов MediaDevices.getUserMedia(), запрашивающий доступ одновременно к микрофону и видеокамере, когда на самом деле у пользователя было лишь одно из этих устройств, либо когда доступ к одному из этих устройств был явным образом запрещён пользователем.
  • При использовании методов DataTransfer.setData() и DataTransfer.getData() теперь можно гибко управлять MIME-типом хранимых в буфере обмена данных. Ранее при вызове getData() был доступен лишь строго определённый набор разрешённых MIME-типов.
  • Поддержка синтеза речи в версиях Firefox для настольных компьютеров в рамках программного интерфейса (API) Web Speech.
  • Дальнейшее расширение поддержки WebExtensions API — нового способа создания расширений, основанного на веб-технологиях HTML/CSS/JS и частично совместимого с аналогичными возможностями других браузеров:

    • управление историей посещений (history): поиск по истории, получение информации о ранее посещённых страницах, а также добавление и удаление записей из истории посещений;
    • метод tabs.removeCSS() позволяет удалять стили, ранее добавленные с помощью метода tabs.insertCSS().

Прочее

  • Прекращён выпуск Windows-версий Firefox для процессоров с поддержкой технологии SSE первого поколения (Pentium III и ниже).
  • В режиме чтения доступна возможность автоматизированного озвучивания текста синтезированным голосом (включается кнопкой с пиктограммой, символизирующей звуковую волну, на вертикальной панели слева) с использованием средств, предоставляемых операционной системой. К сожалению, в Windows 7 русский язык не поддерживается. В Windows 10 русский язык поддерживается, и звучит такая речь относительно сносно неплохо.

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