Что означает полифиллы в HTML5?

300

В чем смысл полиполнений в HTML5? Я видел это слово на многих сайтах о HTML5, например. HTML5-Cross-Browser-Polyfills.

Итак, здесь мы собираем все прокладки, запасные части и полисы для внедрения функций HTML5 в браузерах, которые не изначально поддерживают их.

Я действительно не понимаю, что означает полиполны.

Это новый метод HTML5 или библиотека JavaScript? Я никогда не слышал этого слова до HTML5.

И в чем разница между прокладками, запасными частями и полиполнами?

  • 1
    Вы можете проверить для лучшего понимания blogs.msdn.com/b/jennifer/archive/2011/08/04/…
  • 0
    @ user3400622 Спасибо за ссылку, объяснение в ссылке очень понятно.
Теги:
fallback
shim
polyfills

4 ответа

291
Лучший ответ

A polyfill - это резервная копия браузера, сделанная в JavaScript, которая позволяет функциям, которые вы ожидаете работать в современных браузерах, работать в старых браузерах, например, для поддержки холста (функция HTML5) в старых браузерах.

Это своего рода метод HTML5, поскольку он используется в сочетании с HTML5, но он не является частью HTML5, и вы можете иметь polyfills без HTML5 (например, для поддержки тех технологий CSS3, которые вы хотите).

Вот хороший пост:

http://remysharp.com/2010/10/08/what-is-a-polyfill/

Здесь приведен полный список полиполков и прокладок:

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

  • 5
    Значит, ie7.js - это тоже полифилл
  • 1
    Да: «Многие исправления, включая прозрачность PNG, стили / селекторы CSS, исправление ошибок рендеринга и т. Д.» Это добавляет эту функциональность через JavaScript, который браузер уже не поддерживает.
Показать ещё 5 комментариев
51

Прежде всего, уточните, что такое полифиль: A polyfill не входит в стандарт HTML5. Также не существует polyfill, ограниченного Javascript, хотя вы часто видите, что в этих контекстах упоминаются полисы.

Сам термин polyfill относится к некоторому коду, который "позволяет вам иметь определенную функциональность, которую вы ожидаете в современных или" современных "браузерах, также работать в других браузерах, которые не поддерживают эту встроенную функциональность."

Источник и пример polyfill здесь:

http://www.programmerinterview.com/index.php/html5/html5-polyfill/

16

A polyfill представляет собой часть кода (или плагина), которая предоставляет технологию, которую вы, разработчик, ожидаете от браузера, чтобы обеспечить ее изначально.

  • 1
    Хорошо объяснил.
12

A polyfill - это прокладка, которая заменяет исходный вызов вызовом на прокладку.

Например, скажем, вы хотите использовать объект navigator.mediaDevices, но не все браузеры поддерживают это. Вы могли бы представить себе библиотеку, снабженную прокладкой, которую вы можете использовать следующим образом:

<script src="js/MediaShim.js"></script>
<script>
    MediaShim.mediaDevices.getUserMedia(...);
</script>

В этом случае вы явно вызываете прокладку вместо использования исходного объекта или метода. С другой стороны, polyfill заменяет объекты и методы на исходные объекты.

Например:

<script src="js/adapter.js"></script>
<script>
    navigator.mediaDevices.getUserMedia(...);
</script>

В коде, похоже, вы используете стандартный объект navigator.mediaDevices. Но действительно, polyfill (adapter.js в примере) заменил этот объект своим собственным.

Тот, который он заменил, - это прокладка. Это определит, поддерживается ли эта функция, и ее использовать, если она есть, или она будет работать вокруг нее, используя другие API, если это не так.

Итак, polyfill - это своего рода "прозрачная" прокладка. И это то, что Remy Sharp (кто придумал термин) означал, что "если вы удалили polyfill script, ваш код продолжал работать без каких-либо изменений, несмотря на удаление polyfill".

  • 6
    что такое прокладка?
  • 1
    @ Оливер Уоткинс Если вы знакомы с шаблоном адаптера, то вы знаете, что такое прокладка. Shims перехватывает вызовы API и создает абстрактный слой между вызывающей стороной и целью. Обычно прокладки используются для обратной совместимости

Ещё вопросы

Сообщество Overcoder
Наверх
Меню