Как обеспечить ECMAScript 5 (ES 5) -шим? - PullRequest
36 голосов
/ 04 января 2012

В пятом издании ECMAScript (выпущено в декабре 2009 года) представлено несколько новых методов (подробности см. В этой таблице ).Однако все еще существуют старые браузеры, которые не реализуют эти новые методы.

К счастью, существует удобный скрипт (написанный на JavaScript) - ES5-shim - который реализует эти методы вручную в средах, где их нет.

ОднакоЯ не уверен, как обеспечить ES5-шим ... Должен ли я просто "дать" его всем браузерам, например так:

<script src="es5-shim.js"></scipt>

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

<script>
    if ( !Function.prototype.hasOwnProperty( 'bind' ) ) {
        (function () {
            var shim = document.createElement( 'script' );
            shim.src = 'es5-shim.js';
            var script = document.getElementsByTagName( 'script' )[0];
            script.parentNode.insertBefore( shim, script );
        }());
    }
</script>

(я использую Function.prototype.bind, чтобы проверить, реализует ли браузер все новые методы ECMAScript 5. В соответствии с таблицей совместимости, которую я связал выше, bind - это «последний бастион», когда дело доходит до реализации методов ECMAScript 5.)

Конечно, для того, чтобы эта прокладка была эффективной, она должна быть выполнена перед всеми другими сценариями,Это означает, что мы хотим включить вышеупомянутые элементы SCRIPT в начале страницы (в HEAD, перед всеми другими элементами SCRIPT).

Итак, этот второй пример будет хорошим способом обеспечить ECMAScript 5-shimбратанwsers?Есть ли лучший способ сделать это?

Ответы [ 3 ]

22 голосов
/ 04 января 2012

ES5-Shim будет обрабатывать только те части, которые не реализованы в браузерах, поэтому просто передайте его всем браузерам.Он будет обрабатывать обнаружение того, что должно быть отрегулировано, а что нет.

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

13 голосов
/ 31 августа 2013

Мне кажется, это работает:

<!--[if lt IE 9]><script src="java/es5-shim.min.js"></script><![endif]-->
8 голосов
/ 04 января 2012

В настоящее время решение, которое лучше всего работает с ES5-Shim, заключается в использовании библиотеки во всех средах и позволяет ей определять, какие функции необходимо исправлять во время выполнения.Было бы еще лучше доставить его из CDN сообщества, чтобы максимизировать попадания в кэш-память между сайтами.

При этом существует открытая возможность создания систем, сочетающих в себе обнаружение функций, дактилоскопию агентов и динамическое связывание савтоматически генерировать и доставлять целевые поднаборы.Масштабы этой проблемы выходят далеко за рамки только ES5-Shim и могут быть применены ко всем видам прокладок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...