HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>DOM непрерывно развивается. Какие-то браузеры его адаптируют быстрее, какие-то медленнее. Все это не позволяет легко и непринужденно пользоваться последними новинками. Разработчикам каждый раз нужно думать, какие браузеры распространены у пользователей их проектов.</p>
1 <p>DOM непрерывно развивается. Какие-то браузеры его адаптируют быстрее, какие-то медленнее. Все это не позволяет легко и непринужденно пользоваться последними новинками. Разработчикам каждый раз нужно думать, какие браузеры распространены у пользователей их проектов.</p>
2 <p>Как выяснить, какие браузеры актуальны? Обычно об этом узнают из аналитики. Например, можно использовать Google Analytics, которая в режиме реального времени собирает данные обо всех, кто заходит на сайт.</p>
2 <p>Как выяснить, какие браузеры актуальны? Обычно об этом узнают из аналитики. Например, можно использовать Google Analytics, которая в режиме реального времени собирает данные обо всех, кто заходит на сайт.</p>
3 <p>В особо сложных ситуациях приходится поддерживать совсем старые браузеры, которые практически ничего не могут. Такое нередко встречается в государственных организациях.</p>
3 <p>В особо сложных ситуациях приходится поддерживать совсем старые браузеры, которые практически ничего не могут. Такое нередко встречается в государственных организациях.</p>
4 <p>Например, метод matches(). Он поддерживается Internet Explorer, но только с девятой версии. Если в вашем проекте заявлена совместимость с восьмой версией, то на вызов этого метода мы получим ошибку:</p>
4 <p>Например, метод matches(). Он поддерживается Internet Explorer, но только с девятой версии. Если в вашем проекте заявлена совместимость с восьмой версией, то на вызов этого метода мы получим ошибку:</p>
5 <p>К счастью, JavaScript позволяет частично компенсировать недостатки старых браузеров. Благодаря прототипам разработчики могут добавить недостающую функциональность прямо в реализацию DOM. Делается это с помощью полифилов, которые мы изучим сегодня.</p>
5 <p>К счастью, JavaScript позволяет частично компенсировать недостатки старых браузеров. Благодаря прототипам разработчики могут добавить недостающую функциональность прямо в реализацию DOM. Делается это с помощью полифилов, которые мы изучим сегодня.</p>
6 <p>Общий принцип работы этих библиотек следующий:</p>
6 <p>Общий принцип работы этих библиотек следующий:</p>
7 <ol><li>Проверяем наличие нужного метода или свойства</li>
7 <ol><li>Проверяем наличие нужного метода или свойства</li>
8 <li>Если их нет, то добавляем</li>
8 <li>Если их нет, то добавляем</li>
9 </ol><p>Важно, чтобы библиотека с полифилами грузилась до выполнения любого другого кода. Только в этом случае остальной код может рассчитывать на то, что все нужные свойства будут в наличии.</p>
9 </ol><p>Важно, чтобы библиотека с полифилами грузилась до выполнения любого другого кода. Только в этом случае остальной код может рассчитывать на то, что все нужные свойства будут в наличии.</p>
10 <h2>Добавление метода</h2>
10 <h2>Добавление метода</h2>
11 <p>Рассмотрим пример полифила для метода node.matches(). Он работает для всех популярных браузеров и задействует их специфику, что видно по именам свойств:</p>
11 <p>Рассмотрим пример полифила для метода node.matches(). Он работает для всех популярных браузеров и задействует их специфику, что видно по именам свойств:</p>
12 <p>После выполнения этого кода мы можем использовать метод element.matches(), не боясь, что его не будет в старых браузерах.</p>
12 <p>После выполнения этого кода мы можем использовать метод element.matches(), не боясь, что его не будет в старых браузерах.</p>
13 <h2>Добавление свойства</h2>
13 <h2>Добавление свойства</h2>
14 <p>Более сложный вариант - добавление свойства ParentNode.lastElementChild. Здесь приходится программировать логику поиска нужного элемента:</p>
14 <p>Более сложный вариант - добавление свойства ParentNode.lastElementChild. Здесь приходится программировать логику поиска нужного элемента:</p>
15 <p>Примеры выше не совсем полные. Если бы мы посмотрели исходники соответствующих библиотек, мы бы удивились, как много кода в них. Все таки обеспечение универсальной работы во всех браузерах и всех версиях - это непростая задача.</p>
15 <p>Примеры выше не совсем полные. Если бы мы посмотрели исходники соответствующих библиотек, мы бы удивились, как много кода в них. Все таки обеспечение универсальной работы во всех браузерах и всех версиях - это непростая задача.</p>
16 <p>Чтобы проверить поддержку определенных фич в разных браузерах, можно воспользоваться ресурсом<a>Can I use</a>:</p>
16 <p>Чтобы проверить поддержку определенных фич в разных браузерах, можно воспользоваться ресурсом<a>Can I use</a>:</p>
17 <p>А самый простой способ добавить полифиллы на сайт - это воспользоваться проектом<a>polyfill-fastly.io</a>.</p>
17 <p>А самый простой способ добавить полифиллы на сайт - это воспользоваться проектом<a>polyfill-fastly.io</a>.</p>
18 <p>Кроме этого проекта, на GitHub есть много готовых полифилов для любых частей DOM. Они разбросаны по разным репозиториям разных людей. Поэтому если вам понадобится что-то полифилить, то сначала придется поискать нужную библиотеку.</p>
18 <p>Кроме этого проекта, на GitHub есть много готовых полифилов для любых частей DOM. Они разбросаны по разным репозиториям разных людей. Поэтому если вам понадобится что-то полифилить, то сначала придется поискать нужную библиотеку.</p>
19 <p>Иногда нам нужно просто проверить наличие определенной фичи и выполнить разный код в зависимости от результата. В такой ситуации поможет библиотека<em>modernizr</em>:</p>
19 <p>Иногда нам нужно просто проверить наличие определенной фичи и выполнить разный код в зависимости от результата. В такой ситуации поможет библиотека<em>modernizr</em>:</p>
20 <h2>Ядро JavaScript</h2>
20 <h2>Ядро JavaScript</h2>
21 <p>Полифиллы бывают не только для DOM. Сам JavaScript тоже непрерывно развивается.</p>
21 <p>Полифиллы бывают не только для DOM. Сам JavaScript тоже непрерывно развивается.</p>
22 <p>Многие фичи современного JavaScript настолько упростили разработку, что без них уже сложно. Поэтому практически ни один современный проект не обходится без библиотеки<a>core-js</a>. Она закрывает почти все возможности современного JavaScript.</p>
22 <p>Многие фичи современного JavaScript настолько упростили разработку, что без них уже сложно. Поэтому практически ни один современный проект не обходится без библиотеки<a>core-js</a>. Она закрывает почти все возможности современного JavaScript.</p>
23 <p>Чтобы использовать эту библиотеку, нужно установить ее как зависимость проекта и подключить ее на самом верхнем уровне приложения. И все - дальше она делает всю работу сама, поэтому нам не приходится собирать приложения через<a>webpack</a>:</p>
23 <p>Чтобы использовать эту библиотеку, нужно установить ее как зависимость проекта и подключить ее на самом верхнем уровне приложения. И все - дальше она делает всю работу сама, поэтому нам не приходится собирать приложения через<a>webpack</a>:</p>
24 <p>Далее в курсе будут упражнения, где в<em>index.js</em>вы увидите подключение этой библиотеки.</p>
24 <p>Далее в курсе будут упражнения, где в<em>index.js</em>вы увидите подключение этой библиотеки.</p>