Firefox 158: JPEG XL, новый Sanitizer и уведомления со ссылкой

13 октября 2026 года Mozilla выпустила Firefox 158. Для разработчиков сайтов в нём несколько заметных изменений: JPEG XL включён по умолчанию, HTML Sanitizer стал строже к ссылкам `javascript:`, уведомления научились открывать заданный адрес, а `calc()` — делить значения с разными единицами. Следующий выпуск, Firefox 159, по данным MDN запланирован на 27 октября. Разбираем, что из этого проверить.
Что изменилось
По заметкам к выпуску на MDN:
JPEG XL по умолчанию. Firefox показывает изображения `image/jxl` и добавил этот тип в заголовок Accept для картинок. Сервер может отдавать JPEG XL автоматически.
HTML Sanitizer. Добавлены опция `javascriptURLs` и метод `Sanitizer.setJavascriptURLs()`. Изменилось поведение: небезопасные методы вроде `Element.setHTMLUnsafe()` теперь удаляют ссылки `javascript:`, если используется санитайзер по умолчанию или после `Sanitizer.removeUnsafe()`. Безопасные методы вроде `setHTML()` удаляли их и раньше.
Уведомления. Опция `navigate` в `Notification()` и `showNotification()` задаёт адрес, который откроется по клику на уведомление.
CSS. В `calc()` можно делить значения одного типа с разными единицами — результат становится числом без единиц, которое можно перевести в другой тип.
Производительность. Поддержано свойство `PerformanceResourceTiming.deliveryType`: по значению `cache` видно, что ресурс пришёл из кеша.
Доступность. `aria-busy` теперь поддерживается в Firefox для Android.
WebAuthn. Условный интерфейс входа по ключам доступа теперь появляется в полях с одним только `autocomplete="webauthn"` — по данным заметок к выпуску на firefox.com.
Прокрутка. Позиции прокрутки больше не округляются до целых пикселей экрана — прокрутка стала плавнее и точнее.
WebDriver. Через BiDi можно выдавать разрешения на камеру и микрофон в автотестах, ограничивать размер скриншота и выбирать папку для записи экрана.
| Что | До 158 | В 158 |
|---|---|---|
| JPEG XL | Выключен по умолчанию | Включён, в заголовке Accept |
| setHTMLUnsafe() с санитайзером | Оставлял javascript: | Удаляет javascript: |
| Клик по уведомлению | Обработчик в коде | Опция navigate с адресом |
| Деление в calc() | Только на число | Значение на значение с разными единицами |

Кого касается
- Сайтов с пользовательским контентом — комментарии, отзывы, описания, которые вставляются через Sanitizer: поведение стало безопаснее, но если вы намеренно использовали ссылки `javascript:`, они пропадут.
- Веб-приложений с push-уведомлениями — опция `navigate` упрощает переход по клику.
- Сайтов с большим количеством изображений — JPEG XL можно отдавать пользователям Firefox автоматически.
- Команд, которые пишут автотесты — новые возможности WebDriver BiDi упрощают тесты с камерой и микрофоном.
Что делать
- Если на сайте есть вставка HTML через Sanitizer API — проверьте, что ссылки и кнопки работают без `javascript:` в адресе. Обработчики событий надёжнее.
- Для уведомлений в PWA попробуйте опцию `navigate` как упрощение, сохранив старый обработчик для других браузеров.
- Если раздаёте изображения через CDN с выбором формата — добавьте JPEG XL и заголовок `Vary: Accept`.
- Проверьте сайт в Firefox после обновления: формы, вставка контента, уведомления.
- Держите автообновление браузеров у сотрудников включённым: в Firefox 158, по заметкам Mozilla, вошли исправления безопасности из бюллетеня mfsa2026-106.
- Если сотрудники запускают веб-приложения через расширение PWAsForFirefox и видят ошибку «incomplete installation» — обновите его до 2.20.1 или новее, это известная проблема выпуска.
Как тестировать сайт в нескольких браузерах
Большинство команд разрабатывает и проверяет сайт в Chrome, а пользователи Firefox и Safari сталкиваются с проблемами первыми. Минимальная практика, которая помогает это поймать:
- держать на рабочем месте разработчика актуальные Chrome, Firefox и Safari (или симулятор iOS) и проходить в каждом ключевые сценарии перед выкладкой;
- запускать автотесты основных сценариев (корзина, форма заявки, вход) в нескольких браузерах — Playwright и WebDriver BiDi это поддерживают;
- смотреть в Метрике долю браузеров и ошибки JavaScript по браузерам: всплеск ошибок после выхода новой версии — сигнал проверить сайт;
- подписаться на заметки к выпускам Firefox на MDN и блог WebKit: изменения поведения там описываются заранее.
Почему Sanitizer важен
Вставка HTML из пользовательских данных — один из главных источников XSS-уязвимостей: злоумышленник вставляет в отзыв или комментарий скрипт, и он выполняется у других посетителей. Встроенный в браузер HTML Sanitizer очищает разметку перед вставкой, и изменение в Firefox 158 закрывает ещё одну лазейку — ссылки `javascript:`. Для разработчиков это аргумент перейти от самописных регулярных выражений к штатному API там, где он поддерживается, и не забывать о проверке на сервере.
Что ждать от Firefox 159
По MDN, Firefox 159 запланирован на 27 октября 2026 года, его заметки для разработчиков ещё дополняются. В бета-заметках упоминается, например, метод `Iterator.prototype.includes` — проверка наличия значения в итераторе без превращения его в массив. Бета-функции не всегда доходят до финального выпуска, поэтому строить на них планы рано.
Наше мнение
Мы считаем Firefox 158 спокойным релизом, в котором главное для бизнес-сайтов — изменения безопасности и поддержка JPEG XL. Ломающих изменений для типичного сайта нет, но если в проекте есть самописная вставка HTML или старые ссылки с `javascript:`, их стоит проверить. Что мы советуем клиентам: тестировать ключевые сценарии сайта не только в Chrome — Firefox и Safari регулярно меняют поведение по-своему, и проблемы у их пользователей часто замечают последними.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
Вопросы и ответы
Когда вышел Firefox 158?
13 октября 2026 года. Firefox 159 по данным MDN запланирован на 27 октября.
Что изменилось в HTML Sanitizer?
Небезопасные методы вроде setHTMLUnsafe() теперь удаляют ссылки javascript:, если используется санитайзер по умолчанию или вызван removeUnsafe(). Добавлена настройка javascriptURLs.
Поддерживает ли Firefox JPEG XL?
Да, с версии 158 поддержка включена по умолчанию, и браузер сообщает о ней серверу в заголовке Accept.
Сломает ли Firefox 158 мой сайт?
Для типичного сайта — нет. Проверьте места, где HTML вставляется через Sanitizer API, и ссылки с javascript: в адресе.
Что изменилось для входа по ключам доступа?
По заметкам Mozilla, условный интерфейс WebAuthn теперь появляется в полях, где указан только autocomplete="webauthn". Это упрощает вход без пароля.
Что даёт опция navigate для уведомлений?
Позволяет задать адрес, который откроется при клике на уведомление, без отдельного обработчика события.