Подтвердить что ты не робот

Как предоставить ECMAScript 5 (ES 5) -shim?

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

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

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

<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 для браузеров? Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

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

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

Ответ 2

Кажется, это работает для меня:

<!--[if lt IE 9]><script src="java/es5-shim.min.js"></script><![endif]-->

Ответ 3

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

Таким образом, есть открытая возможность создавать системы, которые объединяют обнаружение функций, отпечатки пальцев оператора и динамическое связывание, чтобы автоматически генерировать и доставлять целевые подмножества подпрограмм. Объем проблемы простирается далеко за рамки ES5-Shim и может применяться ко всем типам прокладок.