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

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

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

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

* Включён по умолчанию инспектор Flexbox (en-US).
* Отладчик JavaScript получил поддержку точек останова XHR (Firefox bug 821610).
* Щелчок правой кнопкой по элементу дерева доступности позволяет вывести его в JSON-формате.
* Если фон текста является сложным (например, градиент или сложное изображение), инструмент цветового контраста в инспекторе доступности покажет диапазон значений цветового контраста.
* Во вкладку «Заголовки» сетевого монитора добавлено отображение политики Referrer для выбранного запроса (Firefox bug 1496742).
* При просмотре трассировки стека (например, в журналах консоли или отладчике JavaScript) вызовы методов фреймворка распознаются и по умолчанию сворачиваются, что облегчает размещение вашего кода.
* Подобно традиционным терминалам теперь можно использовать обратный поиск в истории консоли JavaScript(
 `F9`
 в Windows/Linux или
 `Ctrl`
 +
 `R`
 в macOS, затем ввести искомое, а сочетаниями
 `Ctrl`
 +
 `R`
 /
 `Ctrl`
 +
 `S`
 переключаться между результатами).
* Сокращение `$0` в консоли JavaScript (ссылается на инспектируемый в данный момент элемент страницы) обзавелось возможностью автодополнения. Например, вы можете ввести `$0.te`, чтобы получить предложения автодополнения для свойств наподобие `$0.textContent`.
* Правки, внесённые через просмотр правил в Инспекторе, теперь отображаются на вкладке «Изменения» (Firefox bug 1503920).
### HTML

* События теперь отправляются на отключённые элементы HTML, то есть элементы `<button>`, `<fieldset>`, `<input>`, `<select>` и `<textarea>` (en-US) с установленными атрибутами `disabled` (Firefox bug 329509).
* Как в Chrome и Safari, удаление атрибута `src` у элемента `<iframe>` (en-US) загружает в него `about:blank` (Firefox bug 1501418) . До этого удаление `src` не влияло на содержимое `iframe`.
* Добавлена поддержка атрибута `referrerpolicy` у элементов `<script>` (Firefox bug 1460920).
### CSS

* Убран префикс у значения `crisp-edges` свойства `image-rendering` (en-US) (Firefox bug 1496617).
* Значение `auto` `scrollbar-color` (en-US) теперь разрешается в `auto`, а не в два цвета (Firefox bug 1501418).
* Реализована поддержка свойств `break-*` (Firefox bug 775618):
    + `break-before` (en-US) → `page-break-before` (en-US).
    + `break-after` (en-US) → `page-break-after` (en-US).
    + `break-inside` (en-US) → `page-break-inside` (en-US).
* Реализована поддержка значения `anywhere` у свойства `overflow-wrap` (Firefox bug 1505786).
* Добавлены новые ключевые слова `jump-start`, `jump-end`, `jump-none` и `jump-both`, используемые внутри временной функции steps() (en-US) (Firefox bug 1496619). Функция `frames()`, ранее использовавшаяся для этого, объявлена устаревшей.
* Для совместимости с прочими браузерами добавлены несколько новых значений `-webkit-appearance`. В частности:
    + `meter`, которое отныне используется в качестве значения по умолчанию для элементов `<meter>`; существующее значение `meterbar` теперь является псевдонимом `meter` (Firefox bug 1501483).
    + `progress-bar`, которое отныне используется в качестве значения по умолчанию для элементов `<progress>`; существующее значение `progressbar` теперь является псевдонимом `progress-bar` (Firefox bug 1501506).
    + `textarea`, которое отныне используется в качестве значения по умолчанию для элементов `<textarea>` (en-US); существующее значение `textfield-multiline` теперь является псевдонимом `textarea` (Firefox bug 1507905)
* Изменено поведение `user-select`, чтобы достичь сходства с прочими браузерами (Firefox bug 1506547). Конкретно:
    + `user-select: all`, установленное на элемент, больше не перекрывает значения `user-select` дочерних элементов. Пример:
     html
    ```html
    <div style="-webkit-user-select: all">
      All
      <div style="-webkit-user-select: none">None</div>
    </div>
    
    ```
    `<div>`, на который установлен `none`, теперь не выбирается. До этого значение `none` перекрывалось значением `all` родительского элемента.
    + Теперь можно выбирать элементы не-`contenteditable`, вложенные в элементы `contenteditable`.
    + `user-select` теперь ведёт себя согласованно внутри и снаружи теневого DOM.
    + Удалено проприетарное значение `-moz-text`.
* Реализована поддержка переменных среды CSS (функция `env()` (en-US)) (Firefox bug 1462233).

#### Удалено

* Удалена настройка `layout.css.shape-outside.enabled`; поддержку `shape-outside` (en-US), `shape-margin` (en-US) и `shape-image-threshold` (en-US) больше нельзя отключить через `about:config` (Firefox bug 1504387).
* Удалены некоторые специфичные для Firefox значения `user-select` — `-moz-all`, `-moz-text`, `tri-state`, `element`, `elements` и `toggle`. См. Firefox bug 1492958 и Firefox bug 1506547.
* Как упоминалось выше, удалена временная функция `frames()` (Firefox bug 1496619).
### SVG

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

### JavaScript

* Реализована поддержка `Intl.RelativeTimeFormat` (en-US) (Firefox bug 1504334).
* Максимально допустимое значение length у строк отныне составляет `2^30 - 2` (~1 ГБ) вместо `2^28 - 1` (~256 МБ) (Firefox bug 1509542).
* Добавлена поддержка свойства `globalThis` (Firefox bug 1317422).
### API

#### Новые API

* Включена по умолчанию поддержка Readable Streams (en-US) (Firefox bug 1505122).
* Включена по умолчанию поддержка Storage Access API (Firefox bug 1513021).

#### DOM

* `Performance.toJSON()` (en-US) доступен веб-воркерам (Firefox bug 1504958).
* Запросы `XMLHttpRequest` будут выбрасывать `NetworkError`, если запрошено содержимое типа `Blob`, а метод запроса отличен от `GET` (Firefox bug 1502599).
* Многие функции Fullscreen API (en-US) с префиксом `-moz-` объявлены устаревшими и выдают предупреждение в консоль JavaScript (Firefox bug 1504946).
* `createImageBitmap()` (en-US) отныне поддерживает изображения SVG (`SVGImageElement` (en-US)) в качестве источника (Firefox bug 1500768).

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

* За одно событие разрешено не более одного вызова `Window.open()` (en-US) (Firefox bug 675574).
* События `keyup` (en-US) и `keydown` (en-US) в целях улучшения кроссбраузерной совместимости для пользователей CJKT отныне срабатывают во время композиции IME (Firefox bug 354358).

#### Веб-воркеры

* Поскольку событие `SharedWorkerGlobalScope.onconnect` (en-US) является экземпляром `MessageEvent` (en-US), его свойство `data` теперь представляет собой пустую строку, а не `null` (Firefox bug 1508824).

#### Fetch и сервис-воркеры

* Метод `Response.redirect()` (en-US) теперь корректно выбрасывает `TypeError`, если в качестве первого параметра указан невалидный URL (Firefox bug 1503276).
* Методы `ServiceWorkerContainer.register()` и `WorkerGlobalScope.importScripts()` (когда они используется сервис-воркером) отныне принимают любые файлы с валидными MIME-типом JavaScript (Firefox bug 1354577).
* Добавлена поддержка свойств `FetchEvent.replacesClientId` (en-US) и `FetchEvent.resultingClientId` (en-US) (Firefox bug 1264177).
* Реализована поддержка `ServiceWorkerGlobalScope.onmessageerror` и `ServiceWorkerContainer.onmessageerror` (Firefox bug 1399446).
* Заголовок `Origin` больше не устанавливается у запросов Fetch с методом `HEAD` или `GET` (Firefox bug 1508661).

#### Media, Web Audio и WebRTC

* Словарь WebRTC `RTCIceCandidateStats` (en-US) обновлён в соответствии с последними изменениями спецификации (Firefox bug 1324788, Firefox bug 1489040).
* События `pause` и `resume` `MediaRecorder` (и соответствующие свойства обработчика событий — `MediaRecorder.onpause` (en-US) и `MediaRecorder.onresume` (en-US)) не были реализованы ранее, хотя таблицы совместимости утверждали обратное. Теперь они реализованы (Firefox bug 1458538, Firefox bug 1514016).

#### Canvas и WebGL

* В контекстах WebGL1 и WebGL2 доступно использование расширений сжатия текстур WebGL `EXT_texture_compression_bptc` (en-US) и `EXT_texture_compression_rgtc` (en-US) (Firefox bug 1507263).

#### Удалено

* Отключена мутация событий (en-US) в теневых деревьях (Firefox bug 1489858).
* Удалено нестандартное свойство `currentTime` `MediaStream` (Firefox bug 1502927).
* Удалены настройки `dom.webcomponents.shadowdom.enabled` и `dom.webcomponents.customelements.enabled` — больше нельзя отключить поддержку Shadow DOM и Custom Elements через `about:config` (Firefox bug 1503019).
* Удалено нестандартное событие DOM `text`, срабатывавшее, чтобы уведомить пользовательский интерфейс редактора браузера о строках данных композиции IME и диапазоне выбора (Firefox bug 1288640).
* Событие `keypress (en-US)` больше не срабатывает для непечатаемых клавиш (en-US) (Firefox bug 968056) за исключением клавиши
 `Enter`
 и комбинаций
 `Shift`
 +
 `Enter`
 и
 `Ctrl`
 +
 `Enter`
 (сохранены для кроссбраузерной совместимости).
### Безопасность

* К допустимым заголовкам запросов отныне применяются дополнительные ограничения CORS (Firefox bug 1483815, см. также whatwg fetch issue 382: CORS-safelisted request headers should be restricted according to RFC 7231 для получения дополнительных сведений).
### Сеть

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

### Плагины

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

### WebDriver (Marionette)

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

* `WebDriver:ElementSendKeys` при проверке интерактивности обрабатывает `<input type=file>` менее строго, позволяя скрывать эти элементы без возникновения ошибки `not interactable`. Если требуется строгая проверка, следует использовать `strictFileInteractability` (Firefox bug 1502864).

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

* Команды для манипуляций окнами `WebDriver:FullscreenWindow`, `WebDriver:MinimizeWindow`, `WebDriver:MaximizeWindow` и `WebDriver:SetWindowRect` стали более стабильными (Firefox bug 1492499). При определённых обстоятельствах они больше не вызывают бесконечное зависание, но ожидают в течение 5 секунд, если запрошенное состояние окна не может быть достигнуто (Firefox bug 1521527).
* `WebDriver:ElementClick` отныне корректно высчитывает центр элемента для щелчка по нему, что позволяет взаимодействовать с элементами, имеющими размер 1x1 пиксель (Firefox bug 1499360).

#### Прочее

* При возникновении ошибки `unexpected alert open` выводятся более понятные сообщения (Firefox bug 1502268).
### Прочее

* Добавлена поддержка изображений в формате WebP (en-US) (Firefox bug 1294490).
    + Кроме того, для улучшения кросс-браузерной совместимости MIME-тип WebP (`image/webp`) был добавлен в стандартный заголовок HTTP-запроса `Accept` для файлов HTML (Firefox bug 1507691).
Изменения для разработчиков дополнений
--------------------------------------

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

#### Вкладки

* tabs API (en-US) обзавёлся поддержкой наследников вкладок — вкладке можно назначить ID вкладки-наследника, которая станет активной, когда первая вкладка закроется (Firefox bug 1500479, см. также эту запись в блоге для получения подробных сведений). В частности:
    + Тип `tabs.Tab` (en-US) получил свойство `successorId`, используемое для хранения/получения ID вкладки-наследника.
    + Колбэк обработчика событий `tabs.onActivated` (en-US) получил новый параметр, `previousTabId`, содержащий ID предыдущей активированной вкладки, если она всё ещё открыта.
    + Объект `updateProperties` функции `tabs.update()` (en-US) обзавёлся новым свойством `successorTabId`, которое служит для его обновления.
    + `successorTabId` также возвращается функциями наподобие `tabs.get()` и `tabs.query()` (en-US).
    + Новая функция `tabs.moveInSuccession()` позволяет массово манипулировать наследниками вкладок.
### Изменения манифеста

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

### Прочее

* Версия для Android теперь поддерживает свойства `headerURL`/`theme_frame` для тем расширений (en-US) (Firefox bug 1429488).
Предыдущие версии
-----------------

* Firefox 65 для разработчиков
* Firefox 64 для разработчиков
* Firefox 63 для разработчиков
* 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)