Firefox 63 для разработчиков
============================

В этой статье перечислены ключевые изменения, которые касаются разработчиков. Firefox 63 был выпущен 23 октября 2018 года.

Изменения для веб-разработчиков
-------------------------------

### Инструменты разработчика

* Вкладка инспектора «Шрифты» обзавелась редактором, облегчающим просмотр и правку настроек используемых шрифтов. Подробнее см. в Edit fonts.
* Включён по умолчанию инспектор поддержи доступности (Firefox bug 1482454).
* При наведении курсора на объект в инспекторе поддержки доступности, элемент будет подсвечен, а его роль и имя показаны в информационной панели на странице (Firefox bug 1473030).
* Командная строка веб-консоли теперь находится не внизу окна, а прямо после вывода консоли (Firefox bug 1136299).
* Если адрес принадлежит домену, о котором известно, что он отслеживает пользователей, сетевой монитор покажет специальный значок перед этой ссылкой — см. Значки безопасности (Firefox bug 1333994).
* Настройка `devtools.aboutdebugging.showSystemAddons` отныне по умолчанию имеет значение `false`, что означает — системные дополнения не будут показаны на странице `about:debugging`. Значение этой настройки можно изменить на странице `about:config` (Firefox bug 1425347).
* Упрощена панель инструментов режима адаптивного дизайна, кроме того, добавлена возможность выровнять область просмотра по левому краю.
* Для пользовательских элементов инспектор теперь показывает ссылку на определение класса (Firefox bug 1443923).
### HTML

* Элемент `<img>` обзавёлся поддержкой атрибута `decoding` (Firefox bug 1416328); см. также `HTMLImageElement.decoding`.

#### Удалено

* Удалена поддержка ссылок с типом `sidebar` (`rel="sidebar"`) (Firefox bug 1452645).
### CSS

* Добавлена поддержка псевдокласса `:defined` (Firefox bug 1331334).
* В Flexbox-раскладку добавлена поддержка `row-gap`, `column-gap` и `gap` (Firefox bug 1398483).
* Снова включена поддержка запросов pixel-density правила @media (en-US), у которых есть префикс -webkit (Firefox bug 1444139).
* Реализована поддержка свойств CSS Flexible Box Layout (Flexbox) `align-self`, `align-content` и `align-items`, а также `justify-content` (Firefox bug 1472843).
* Реализована функция `path` для `offset-path` (en-US) (Firefox bug 1429298).
* Внесены улучшения синтаксиса из спецификации Media Queries Level 4 (en-US) (Firefox bug 1472843).
* Свойства `offset-*` переименованы в `inset-block-start` (en-US), `inset-block-end` (en-US), `inset-inline-start` (en-US) и `inset-inline-end` (en-US) (Firefox bug 1464782).
* Добавлена поддержка prefers-reduced-motion (Firefox bug 1365045, Firefox bug 1475462).
* Свойство `resize` (en-US) обзавелось относительно-направленными значениями (`block`, `inline`) (Firefox bug 1464786).
* Реализована flexbox-раскладка для значений `safe` и `unsafe` в `align-self`, `align-content` и `justify-content` (Firefox bug 1297774).
* Логические свойства (en-US) (там, где это необходимо) стали анимируемыми (Firefox bug 1309752).

#### Удалено

* Удалены `offset-block-start`, `offset-block-end`, `offset-inline-start` и `offset-inline-end`; как упомянуто выше, они переименованы в `inset-*` (Firefox bug 1464782).
### SVG

*Без изменений.*

### JavaScript

* Реализована поддержка свойства `Symbol.prototype.description` (en-US) (Firefox bug 1472170).
* Добавлен метод `Object.fromEntries` (Firefox bug 1469019).
* Существенно улучшено сообщение об ошибке, выдаваемое при попытке доступа к свойству не определённого объекта. В случае, когда `x` не определён, а вы пытаетесь получить доступ к `x.y`, консоль вернёт более понятное `x не определён; невозможно получить доступ к его свойству "y"` (en-US) вместо `TypeError: x не определён` (Firefox bug 1259822).

#### Удалено

* Удалена экспериментальная поддержка сериализации IndexedDB WebAssembly.Module (Firefox bug 1469395).
### API

#### Новые API

* Включена по умолчанию поддержка API Shadow DOM (Firefox bug 1471947) и Custom Elements (Firefox bug 1471948); см. Веб-компоненты для получения подробных сведений.
* Реализован API Media Capabilities (en-US) (Firefox bug 1409664).
* Реализована и включена по умолчанию поддержка API Async Clipboard (en-US) (Firefox bug 1461465). Как и в Chrome, в Firefox реализованы лишь методы `writeText()` (en-US) и `readText()` (en-US), но, в отличие от Chrome, `readText()` доступен лишь дополнениям.
* Поддерживается интерфейс `SecurityPolicyViolationEvent` (en-US). Он позволяет отправлять события при нарушении `Content-Security-Policy` (en-US) (Firefox bug 1472661).

#### DOM

* Включены по умолчанию следующие элементы API Web Animations (см. Firefox bug 1476158):
    + Свойства `ready` (en-US) и `finished` (en-US) `Animation`, указывающие на `Promise` `ready` и `finished` объекта `Animation`.
    + Свойство `effect` (en-US) объекта `Animation`.
    + Интерфейсы `KeyframeEffect` (en-US) и `AnimationEffect` (en-US).
* Реализован метод `Element.toggleAttribute()` (en-US) (Firefox bug 1469592).
* В целях совместимости добавлена поддержка нестандартного свойства `Event.returnValue` (en-US) (Firefox bug 1452569).
* Теперь, когда свойство `Window.event` (en-US) стало стандартным, оно реализовано в Firefox в целях совместимости (Firefox bug 218415), но из-за проблем совместимости (см. Firefox bug 1479964) включено лишь в «ночных» выпусках. Его поддержкой управляет настройка `dom.window.event.enabled` (Firefox bug 1493869).
* Для паритета с Edge и Chrome свойство `navigator.platform` (en-US) отныне возвращает `"Win32"` даже в 64-разрядных операционных системах Windows (Firefox bug 1472618).
* Раньше, ссылки, открывающие новые окна с `rel="noopener"`, и `Window.open()` (en-US) с `noopener` (en-US) приводили к тому, что у окна были отключены все свойства и разработчику приходилось включать необходимые ему стандартные свойства. Отныне такие окна будут иметь все те же свойства, что и любое другое окно, а разработчику следует отключать нежелательные (Firefox bug 1419960).

#### События DOM

* На платформе Windows улучшена обработка *правой* клавиши
 `Alt`
 . Если в текущей раскладке клавиша
 `Alt`
 назначена на
 `AltGr`
 , значение `KeyboardEvent.key` будет `"AltGraph"`. Такое поведение соответствует поведению, принятому недавно в Chrome (Firefox bug 900750).

#### Медиа, Web Audio и WebRTC

* Доступ к микрофону теперь работает одновременно в нескольких вкладках, даже в рамках одного процесса контента (Firefox bug 1404977).
* `RTCDataChannel` (en-US) теперь поддерживает формат данных sctp-sdp-21 в дополнение к старому формату sctp-sdp-05.
* Узлы `ConstantSourceNode` (en-US) отныне имеют не один, а два канала (Firefox bug 1413283).
* Интерфейс API Web Audio `AudioScheduledSourceNode` (en-US) (и все остальные типы узлов, основанные на нём) теперь выбрасывает корректное исключение (`RangeError`), если время начала узла представляет собой отрицательное значение (Firefox bug 1413284).
* Минимальные и максимально допустимые значения `value` (en-US) объекта `AudioParam` (en-US) изменены на минимальное отрицательное число с плавающей запятой одинарной точности (-340,282,346,638,528,859,811,704,183,484,516,925,440) и максимальное положительное число с плавающей запятой одинарной точности (+340,282,346,638,528,859,811,704,183,484,516,925,440) (Firefox bug 1476695).
* Включена по умолчанию поддержка метода `SourceBuffer.changeType` (en-US), позволяющего изменить кодеки во время активного потока. Это часть API Media Source Extensions (en-US) (Firefox bug 1481166).
* Метод `AudioParam.setValueCurveAtTime()` (en-US) обновлён, чтобы корректно принимать массив значений с плавающей запятой для указания значений параметров, которые изменяются со временем. До этого он требовал `Float32Array` (en-US) (Firefox bug 1421091).
* `AudioParam.setValueCurveAtTime()` (en-US) обновлён, чтобы возвращать правильный `TypeError`, если в массиве `values` обнаружено не конечное значение (Firefox bug 1472095).
* Кроме того, `setValueCurveAtTime()` обновлён таким образом, чтобы, когда параметр заканчивает следовать кривой значений, значение параметра устанавливалось в соответствии с последним значением в списке значений кривой (Firefox bug 1308436).
* Словарь `RTCRTPStreamStats` переименован в `RTCRtpStreamStats` (en-US) согласно прочим словарям WebRTC и спецификации (Firefox bug 1480498).
* Словарь `RTCRtpStreamStats` получил поддержку свойства `kind` (en-US) (Firefox bug 1481851).
* Свойство `isRemote` словаря `RTCRtpStreamStats` (en-US) объявлено устаревшим и будет удалено в Firefox 65. При доступе к свойству будет выведено предупреждение в консоли. Подробности в блоге (Firefox bug 1393306).

#### Canvas и WebGL

* `HTMLCanvasElement.getContext()` обзавёлся новым атрибутом `powerPreference`. В macOS, при наличии нескольких графических процессоров, это позволяет приложениям и апплетам WebGL, которым не важна производительность, запрашивать слабый GPU вместо более мощного и потребляющего больше энергии (Firefox bug 1349799).

#### Удалено

* Удалены устаревшие нестандартные методы `Window.back()` (en-US) и `Window.forward()` (en-US), реализованные лишь в Firefox. Вместо них следует использовать методы `window.history.back()` (en-US) и `window.history.forward()` (en-US) (Firefox bug 1479486).
* Методы `createObjectURL()` и `revokeObjectURL()` (en-US) больше не доступны на экземплярах `ServiceWorker`, поскольку легко приводят к утечкам памяти (Firefox bug 1264182).
* Удалена устаревшая и ограниченная поддержка эффектов Доплера на `PannerNode`. У интерфейса `AudioListener` (en-US) удалены свойства `dopplerFactor` и `speedOfSound`, кроме того, у интерфейса `PannerNode` удалён метод `setVelocity()` (Firefox bug 1148354).
### CSSOM

*Без изменений.*

### HTTP

* Реализован заголовок `Clear-Site-Data` (en-US); больше он не скрыт за соответствующей настройкой (Firefox bug 1470111).
### Безопасность

* Фавиконы сайтов отныне подчиняются политике защиты контента (CSP), если она настроена (Firefox bug 1297156).
* Выражение `'report-sample'` директивы CSP `script-src` отныне учитывается при создании отчёта о нарушении. Эта директива указывает, что в отчёт должен быть включён краткий пример того, где произошло нарушение. До этого Firefox всегда включал такой пример в отчёт (Firefox bug 1473218).
* Библиотеки NSS обновлены до версии 3.39 (Firefox bug 1470914).
### Плагины

*Без изменений.*

### WebDriver (Marionette)

#### Новые возможности

* Marionette будет возвращать возможность (en-US) `setWindowRect` в ответы `WebDriver:NewSession`, если браузер поддерживает все команды позиционирования и изменения размера окна (это верно лишь для Firefox, но не для любого мобильного приложения) (Firefox bug 1470659).
* Реализована поддержка возможности `unhandledPromptBehavior`, позволяющая настроить prompt behavior (Firefox bug 1264259).
* Командам `WebDriver:ExecuteScript` и `WebDriver:ExecuteAsyncScript` добавлена возможность обработки запросов к пользователю (Firefox bug 1439995).

#### Изменения API

* Удалены устаревшие конечные точки команд без префикса `WebDriver:` (Firefox bug 1451725).
* Команда `WebDriver:NewSession` возвращает рекомендованные строки (`linux`, `mac`, `windows`) для `platformName`, как и определено в спецификации WebDriver (Firefox bug 1470646).

#### Исправленные ошибки

* События, связанные с фокусом, отсутствовали при взаимодействии элементов, если окно браузера находилось в фоне (Firefox bug 1398111).
* Последовательное выполнение действий `pointerDown` и `pointerUp` могло вызвать двойной щелчок, поскольку `WebDriver:ReleaseActions` не сбрасывал счётчик двойных щелчков (Firefox bug 1422583).
* Многократное выполнение действий `pause` могло привести к бесконечному зависанию (Firefox bug 1447449).
* `WebDriver:ExecuteScript` и `WebDriver:ExecuteAsyncScript` вызывали ошибку циклической ссылки при возвращении коллекции элементов (Firefox bug 1447977).
* Для предотвращения состояния гонки команды `WebDriver:AcceptAlert` и `WebDriver:DismissAlert` будут ожидать закрытия запроса к пользователю (Firefox bug 1479368).
* Записи журнала, вызванные скриптом фрейма, не ограничивались `MarionettePrefs.logLevel`, а содержали всё подряд (Firefox bug 1482829).
* `WebDriver:TakeScreenshot` вызывал ошибку при создании скриншота окна, у которого размер стороны превышал 32767 пикселей (Firefox bug 1485730).
* `WebDriver:SendAlertText` не заменял текст по умолчанию в запросе у пользователя, если переданный текст представлял собой пустую строку (Firefox bug 1486485).
### Прочее

* Исправлено поведение `PerformanceObserver.observe()` (en-US): этот метод теперь ничего не делает, если в указанном массиве типов записей не обнаружены допустимые типы записей или массив пуст/отсутствует. До этого некорректно выбрасывался `TypeError` (Firefox bug 1403027).
* Формат OpenSearch (en-US) теперь допускает использование `application/json` в качестве типа URL-адреса (`application/json` является ссылкой на `application/x-suggestions+json`) (Firefox bug 1425827).
Изменения для разработчиков дополнений
--------------------------------------

### Изменения API

#### Темы

* Цвет текста по умолчанию для значков `browserAction` (en-US) теперь автоматически становится чёрным или белым, чтобы достичь максимального контраста с фоном (Firefox bug 1474110).
* Свойства `accentcolor` и `textcolor` ключа `theme` (en-US) теперь необязательны (Firefox bug 1413144).
* `browserAction.getBadgeTextColor()` (en-US) и `browserAction.setBadgeTextColor()` (en-US) позволяют получать и настраивать цвет текста значков `browserAction` (en-US) (Firefox bug 1424620).
* Объект `colors` ключа `theme` теперь поддерживает свойства `ntp_text` (для указания цвета текста в новой вкладке) и `ntp_background` (для указания цвета фона) (Firefox bug 1347204).
* Темы получили возможность настраивать цвет боковых панелей, например, боковой панели закладок (Firefox bug 1418602). Соответствующие свойства:
    + `sidebar`: цвет фона.
    + `sidebar_text`: цвет текста.
    + `sidebar_highlight`: цвет фона выделенного элемента.
    + `sidebar_highlight_text`: цвет текста выделенного элемента.
* Метод `management.install()` (en-US) позволяет дополнениям устанавливать и задействовать подписанные темы (Firefox bug 1369209).

#### Поиск

* Новый API `search` (en-US) позволяет получить список установленных поисковых плагинов, и выполнять поиск с их помощью (Firefox bug 1352598).
* `topSites.get()` (en-US) получил поддержку параметра `options`, позволяющего настроить различные параметры возвращённого списка сайтов (Firefox bug 1445836).

#### Вкладки

* `tabs.onHighlighted` (en-US) отныне поддерживает множественное выделение (Firefox bug 1474440).
* `tabs.highlight` (en-US) теперь включает необязательное поле в объекте `highlightInfo` — `populate` — по умолчанию имеющее значение `true`. Установка его значения в `false` запрещает возвращённому объекту `windows.Window` заполнять список вкладок, что положительно сказывается на производительности (Firefox bug 1489814).
* `tabs.update` (en-US) позволяет менять статус выделения вкладки с помощью `highlighted: true` в параметре `updateProperties` (Firefox bug 1479129).
* `tabs.update` (en-US) поддерживает изменения статуса выделения вкладки без изменения фокуса (Firefox bug 1486050). Для этого в параметре `updateProperties` используются одновременно `highlighted: true` и `active: false`.
* `tabs.query` (en-US) стала возвращать массив объектов `tabs.Tab` (en-US) при выборе нескольких вкладок (Firefox bug 1465170).
* Свойство `tabs.Tab` (en-US) теперь корректно отражает то, какие вкладки выделены (подсвечены), а `tabs.highlight` (en-US) поддерживает изменение статуса выделения нескольких вкладок (Firefox bug 1464862).
* Свойство `isarticle` в объекте `extraParameters`, передаваемом в `tabs.onUpdated` (en-US), переименовано в `isArticle`. Старое название сохранено, но объявлено устаревшим. Это изменение попало в Firefox 62 (Firefox bug 1461695).
* Событие `tabs.onUpdated` (en-US) позволяет отслеживать, какая вкладка привлекает внимание пользователя с помощью свойства `attention` объекта `changeInfo` (Firefox bug 1396684).

#### Меню

* В API `menus` (en-US) добавлен `menus.getTargetElement()` (en-US). Метод возвращает щелчок по элементу, на который ссылается параметр `targetElementId` (Firefox bug 1325814).
* `menus.create()` (en-US) теперь позволяет создавать невидимые пункты меню, `menus.update()` (en-US) позволяет переключать видимость пунктов меню (Firefox bug 1482529).
* Элементы, созданные с помощью API `menus` (en-US), обзавелись поддержкой клавиш доступа (Firefox bug 1320462).
* Параметр `menus.create()` (en-US) и `menus.update()` (en-US) `targetUrlPatterns` теперь поддерживает любые схемы URL-адресов, даже те, которые обычно не допускаются в шаблоне соответствия (Firefox bug 1280370).
* При нажатии на элемент контекстного меню вкладки, разрешение "activeTab" будет дано этой вкладке, даже если она не является активной (Firefox bug 1446956).

#### Прочее

* `commands.onCommand` (en-US) теперь расценивается как пользовательский ввод (en-US) (Firefox bug 1408129).
* API `webRequest` позволяет фильтровать speculative-соединения (Firefox bug 1479565).
* `webRequest.SecurityInfo` (en-US) обзавёлся свойствами `keaGroupName` и `signatureSchemeName`. Это изменение попало в Firefox 62 (Firefox bug 1471959).
* `cookies.Cookie` включает свойство, показывающее состояние атрибута SameSite у кук. Перечисление `cookies.SameSiteStatus` (en-US) определяет значение состояния SameSite (Firefox bug 1351663).
* Шаблоны соответствия для URL-адресов теперь явно соответствуют схеме "данные" (Firefox bug 1280370).
Предыдущие версии
-----------------

* Firefox 62 для разработчиков
* Firefox 61 для разработчиков (en-US)
* Firefox 60 для разработчиков (en-US)
* Firefox 59 для разработчиков (en-US)
* Firefox 58 для разработчиков (en-US)
* Firefox 57 для разработчиков (en-US)
* Firefox 56 для разработчиков (en-US)
* Firefox 55 для разработчиков (en-US)
* Firefox 54 для разработчиков (en-US)
* Firefox 53 для разработчиков
* Firefox 52 для разработчиков (en-US)
* Firefox 51 для разработчиков (en-US)
* Firefox 50 для разработчиков (en-US)
* Firefox 49 для разработчиков (en-US)
* Firefox 48 для разработчиков (en-US)
* Firefox 47 для разработчиков (en-US)
* Firefox 46 для разработчиков (en-US)
* Firefox 45 для разработчиков (en-US)
* Firefox 44 для разработчиков (en-US)
* Firefox 43 для разработчиков
* Firefox 42 для разработчиков (en-US)
* Firefox 41 для разработчиков (en-US)
* Firefox 40 для разработчиков (en-US)
* Firefox 39 для разработчиков (en-US)
* Firefox 38 для разработчиков (en-US)
* Firefox 37 для разработчиков (en-US)
* Firefox 36 для разработчиков (en-US)
* Firefox 35 для разработчиков (en-US)
* Firefox 34 для разработчиков (en-US)
* Firefox 33 для разработчиков
* Firefox 32 для разработчиков