Использование прокладки ES5 с помощью jquery/mootools/prototype

Я наткнулся на этот проект: https://github.com/termi/ES5-DOM-SHIM, который обеспечивает почти полную поддержку ES5 во всех браузерах, включая старые IE.

Я использую его в чистых проектах JS, но теперь я должен включить jquery/mootools/prototype в проект (который использует High Charts).

Даже включение jquery script вызывает ошибки в IE8 вместе с этой прокладкой. Как я могу сохранить лучшее из обоих миров?

Мой заголовок документа выглядит следующим образом:

<!--[if lte IE 8]>
<script src="/js/a.ie8.js"></script>
<![endif]-->
<script src="/js/a.js"></script>
<script src="/js/jquery.1.8.2.js"></script>
<script src="/js/main.js"></script>

Ответ 1

Убедитесь, что вы используете правильную структуру html, например:

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <!--[if lte IE 8]>
    <script src="a.ie8.js"></script>
    <![endif]-->
    <script src="a.js"></script>
    <script src="jquery.1.8.2.js"></script>
    <script src="main.js"></script>
</head>
<body>

</body>

Когда я тестировал вашу структуру (без doctype), я также получал ошибку в IE.

Ответ 2

Это поздний ответ, и, вероятно, это не касается вашей основной проблемы. Таким образом, рискуя получить downvoted...

Насколько я могу судить по проекту Github, ES5-DOM-SHIM не только обеспечивает прокрутку для функций ES5, но и пытается закрепить возможности DOM, недоступные для IE. Это очень полезно, если вы хотите напрямую программировать DOM API.

jQuery также предоставляет уровень совместимости, который выполняет функцию проверки, чтобы заполнить пробелы в реализации (так что вам не нужен DOM polyfill, если ваш код использует только jQuery).

Смешивание обоих не кажется хорошей идеей, потому что:

  • Вы дублируете много логики polyfill в своем JS.
  • Polyfill имеют ограничения, поэтому, если jQuery считает, что ваш браузер полностью поддерживает функцию, когда нет, вы можете получить некоторые неожиданные ошибки.

Если вы хотите использовать только полисы для JavaScript, попробуйте https://github.com/kriskowal/es5-shim (на нем основан ES5-DOM-SHIM)

Ответ 3

Прежде всего, обязательно добавьте doctype в свой HTML-документ:

<!DOCTYPE html>

Он должен быть в первой строке вашего HTML файла (ов). Это заставляет старый IE работать в стандартном режиме и избегать некоторых причуд.

С другой стороны, ES5-DOM-SHIM, похоже, пытается сделать слишком много, и вы в настоящее время хотите использовать jQuery, который уже отправляет методы, связанные с несоответствиями DOM в браузерах.

Я бы рекомендовал вам просто использовать jQuery, и если вам нужно поддерживать новые элементы HTML5 и/или настраиваемые элементы, используйте HTML5shiv (метод defacto для добавления поддержки элементов HTML5 в IE). Если вам действительно нужны прокладки ES5/6, то используйте библиотеки с более широкой поддержкой сообщества, например es5-shim и es6-shim.