Тесты поддержки браузерами современных веб-функций на JavaScript

Источник: «Browser Support Tests in JavaScript for Modern Web Features»
Иногда важно знать, поддерживается ли функция браузером или нет, чтобы можно было что-нибудь предпринять. Возможно, загрузить полифилл или просто выбрать другой подход. В статье рассматриваются новые возможности браузеров и тесты их поддержки браузером.

Это просто статья с фрагментами кода, показывающая, как проверить поддержку некоторых новых функций в HTML, CSS и JavaScript. Эта статья ни в коем случае не является исчерпывающей и не рассказывает, что делают эти функции, о чём лучше рассказать в других статьях. Здесь также не рассматривается тестирование поддержки на любом другом языке, кроме JavaScript. По большей части для этого следует обратиться к @supports в CSS.

Не стесняйтесь добавлять свои предложения, чтобы сделать эту статью как можно более полезной!

HTML Возможности

View Transitions API

View Transitions API

// Не поддерживается
if (!document.startViewTransition) {
updateTheDOMSomehow();
} else {
// Поддерживается
document.startViewTransition(() => {
updateTheDOMSomehow()
});
}

Я не знаю, как проверить поддержку @view-transition.

Popover API

Popover API

// Поддерживается
if (HTMLElement.prototype.hasOwnProperty("popover")) {

}

Элемент <dialog>

<dialog>

// Поддерживается
if (typeof HTMLDialogElement === 'function') {

}

Декларативный Shadow DOM

Декларативный Shadow DOM

// Поддерживается
if (!!Element.prototype.attachShadow) {

}

Ленивая загрузка изображений

Ленивая загрузка изображений

// Поддерживается
if ('loading' in HTMLImageElement.prototype) {

}

Ленивая загрузка Iframe

<iframe>: The Inline Frame element

// Поддерживается
if ('loading' in HTMLIFrameElement.prototype) {

}

CSS Возможности

Селекторы CSS и пары "свойство-значение" можно протестировать с помощью CSS.supports() из JavaScript.

:where()

:where()

// Поддерживается
if (CSS.supports('selector(:where(h1))')) {
document.documentElement.classList.add("supports-where");
}

:has()

:has()

// Поддерживается
if (CSS.supports('selector(:has(h1))')) {
document.documentElement.classList.add("supports-has");
}

@layer

@layer

// Поддерживается
if (typeof CSSLayerBlockRule !== "undefined") {

}

Позиционирование ссылок

CSS anchor positioning

// Поддерживается
if (CSS.supports("anchor-name: --anchor-el")) {

}

Subgrid

Subgrid

// Поддерживается
if (CSS.supports("grid-template-columns", "subgrid")) {

}

light-dark()

light-dark()

// Поддерживается
if (CSS.supports('color: light-dark(black, white)')) {

}

OKLCH Цвет

oklch()

// Поддерживается
if (CSS.supports("color: oklch(0% 0 0")) {

}

JavaScript Возможности

AbortController

// Поддерживается
if (typeof AbortController === "function") {

}

Promise.finally()

Promise.prototype.finally()

// Поддерживается
if (typeof Promise.prototype.finally === 'function') {

}

Дополнительные материалы

Предыдущая Статья

WeakMap — скрытое сокровище в PHP

Следующая Статья

Как работают Фасады Laravel