Firefox 25

Web Audio API

Юбилейный, 25-й выпуск свободного веб-браузера Firefox дарит нам долгожданную поддержку Web Audio API — стандартизованного набора программных средств, позволяющих манипулировать звуком непосредственно в браузере с помощью JavaScript без использования сторонних программных модулей (плагинов) типа Flash.

Web Audio API открывает широкие возможности по обработке и генерации звука, например, в онлайн-аудиопроигрывателях, музыкальных веб-приложениях и браузерных играх. В перспективе можно ожидать появления полномасштабных программных рабочих станций для работы с музыкой и звуком (DAW), работающих непосредственно в браузере. Особенно актуальным их практическое использование может стать в сочетании с Web MIDI API, спецификация которого находится сейчас в разработке и в будущем позволит веб-приложениям работать с MIDI-данными и взаимодействовать с внешними устройствами типа MIDI-клавиатур.

К сожалению, в Firefox-реализации Web Audio API пока есть некоторые проблемы с быстродействием, но это не отменяет значимости нововведения в целом.

Единственное, что не вполне ясно — Web Audio API в Firefox реализован почему-то сразу без префикса, в то время как спецификация по-прежнему находится в состоянии черновика, а значит теоретически ещё может измениться несовместимым с существующими реализациями образом.

Изначально планировалось включить поддержку Web Audio API уже в Firefox 23, но ввиду недостаточной на тот момент стабильности включение этой функциональности было отложено до Firefox 25.

Ранее в Firefox (начиная с Firefox 4) была реализована экспериментальная поддержка Audio Data API — собственного нестандартного API для работы со звуком, который обладает сходными с Web Audio API возможностями, но начиная с Firefox 22 не рекомендуется к использованию ввиду своей нестандартности на фоне планов по реализации стандартного Web Audio API. В Firefox 28 программный интерфейс Audio Data планируется отключить на уровне настройки в about:config, а спустя несколько версий — полностью удалить весь относящийся к Audio Data API программный код.

HTML, CSS

  • Содержимое фрейма теперь можно задать в атрибуте srcdoc соответствующего HTML-элемента IFRAME. В JavaScript атрибуту srcdoc соответствует свойство srcDoc.
  • Поддержка значения local CSS-свойства background-attachment. Значение local позволяет прокручивать фоновое изображение вместе с содержимым элемента — без необходимости добавлять дополнительный вложенный контейнер.
  • Поддержка нестандартного CSS-свойства -moz-osx-font-smoothing, значение grayscale которого позволяет достичь результата, аналогичного достигаемому в WebKit-браузерах с помощью нестандартного свойства -webkit-font-smoothing: antialiased, предназначенного для управления сглаживанием текста в Mac OS X и позволяющего переключаться между субпиксельным сглаживанием и сглаживанием оттенками основного цвета или отключать сглаживание полностью на уровне отдельных HTML-элементов. Свойство доступно только в версиях Firefox для Mac OS X.
  • Новое нестандартное свойство -moz-os-version при его использовании в составе Media Queries призвано облегчить применение разных стилей в разных операционных системах для разработчиков дополнений для Firefox (для обычных веб-страниц эта возможность закономерно недоступна). На данный момент поддерживается только Windows: windows-xp, windows-vista, windows-win7, windows-win8.

JavaScript

  • Поддержка ряда новых JavaScript-возможностей из состава ECMAScript 6 (Harmony):

    • Метод Array.of() функционально аналогичен конструктору new Array() и его краткой форме [], но имеет некоторые отличия:

      • в отличие от конструктора new Array(), ведущего себя по-разному в зависимости от количества аргументов, Array.of() всегда возвращает массив, содержащий переданные аргументы, сколько бы их ни было;
      • объект Array.of можно при необходимости передать в качестве аргумента в какую-либо функцию;
      • исключается случайное появление пустых элементов в результирующем массиве вследствие пропуска элементов при его создании — пустой аргумент при вызове метода является синтаксической ошибкой.

      Метод Array.from(), который изначально планировалось реализовать параллельно и который предназначен для лёгкого и интуитивного преобразования любого массивоподобного объекта в реальный массив (объект Array), к сожалению, пока не реализован.

    • Методы parseInt() и parseFloat() объекта Number, являющиеся псевдонимами одноимённых глобальных функций.
    • Метод forEach() для удобного обхода элементов, содержащихся в объектах Map и Set. Поддержка объектов Map и Set была добавлена в Firefox 13.
    • Новые методы объекта Math: log10(), log2(), log1p(), expm1(), cosh(), sinh(), tanh(), acosh(), asinh(), atanh(), trunc(), sign() и cbrt().
    • Поддержка двоичных и восьмеричных целочисленных литералов вида 0b10101010, 0B1010, 0o777, 0O237.
    • Новая константа Number.EPSILON содержит минимальное число в машинном представлении, при сложении которого с числом 1 результат не будет равен 1.
  • Метод toBlob() объекта HTMLCanvasElement теперь принимает 3-й аргумент, позволяющий явно указать нужную степень JPEG-сжатия.

Прочее

  • В панели «Сеть» Веб-консоли теперь можно изменить и повторно отправить отдельный взятый запрос.
  • Устранена проблема, проявлявшаяся в том, что некоторые из миниатюрных скриншотов часто посещаемых сайтов в пустой новой вкладке иногда отсутствовали.

Firefox 24

Некоторые интересные новшества предыдущей — 24-й — версии Firefox, самостоятельный обзор которой в блоге не публиковался:

  • Устранён надоедливый баг, появившийся в Firefox 14 и заключавшийся в автоматическом добавлении www-префикса к адресу, выбранному с помощью функции автодополнения (autofill, inline autocomplete) и при автодополнении www-префикса не содержавшего.
  • Значения -moz-zoom-in и -moz-zoom-out CSS-свойства cursor, изначально являвшиеся нестандартным расширением Firefox и позднее включённые в спецификацию CSS3 UI, теперь поддерживаются без префикса: zoom-in и zoom-out.
  • Метод element.classList.toggle() теперь поддерживает условное добавление или удаление класса в зависимости от булевой истинности необязательного второго аргумента. Например, вызов element.classList.toggle('foo', true) добавит класс, а element.classList.toggle('bar', false) — удалит.
  • Новые JavaScript-конструкторы Range(), Text(), Comment(), DocumentFragment() позволяют создавать соответствующие DOM-объекты напрямую, без вызова методов-фабрик create*() объекта document. Например, (new Text) равнозначно document.createTextNode().
  • Новый JavaScript-метод String.prototype.repeat(), функционально аналогичный PHP-функции str_repeat(), возвращает строку, содержащую заданную строку, повторённую заданное количество раз.
  • DOM-метод ChildNode.remove() удаляет непосредственно DOM-узел, по отношению к которому вызван, без необходимости прибегать к излишне многословным вызовам вида ChildNode.parentNode.removeChild(ChildNode).
  • Для HTML-элемента TRACK, позволяющего привязать к элементам AUDIO и VIDEO дополнительную информацию (например, субтитры) и пока в Firefox не реализованного, реализована экспериментальная поддержка JavaScript-интерфейсов HTMLTrackElement, TextTrack, TextTrackCue, TextTrackList и TextTrackCueList, по умолчанию отключённая и включаемая about:config-настройкой media.webvtt.enabled.
  • Экспериментальная поддержка JavaScript-интерфейса Gamepad и метода Navigator.getGamepads, по умолчанию отключённая и включаемая about:config-настройкой dom.gamepad.enabled.
  • Реализована «ленивая» генерация байт-кода: байт-код каждой JavaScript-функции теперь генерируется только при первом реальном её вызове. С учётом того, что в настоящее время широко используются универсальные библиотеки типа jQuery, многие функции которых никогда не вызываются, это снижает потребление памяти примерно на 5% и делает браузер более отзывчивым благодаря снижению нагрузки на «сборщик мусора» (GC, Garbage Collector).
  • Улучшена отрисовка векторных изображений в формате SVG.
  • Поддержка вертикальной синхронизации (vsync) в Windows.
  • Сделана более отзывчивой прокрутка страниц, содержащих большое количество изображений.
  • Поддержка воспроизведения аудиофайлов в формате MP3 в Windows XP средствами DirectShow, изначально планировавшаяся на Firefox 24, отложена до Firefox 26.
  • На основе Firefox 24 создана очередная версия браузера с увеличенным периодом поддержки (ESR) для корпоративных пользователей.
  • Незамеченное ранее: в Firefox 22 поля форм типа file наконец-то стали корректно обрабатывать щелчок на связанном с ним элементе LABEL, что, в частности, открывает возможность кроссбраузерной реализации нестандартного оформления таких полей без необходимости прибегать к ухищрениям типа явного вызова обработчика щелчка средствами JavaScript.

Кстати, по некоторым данным, Mozilla рассматривает возможность перехода с 6-недельного цикла разработки на 9-недельный, что, вероятно, поспособствует увеличению количества и/или значимости новшеств в каждой новой версии.


См. также: