37 votes

Comment fournir ECMAScript 5 (ES 5) -shim?

ECMAScript Cinquième Édition (publié en décembre 2009) introduit un tas de nouvelles méthodes (voir ce tableau pour plus de détails). Cependant, il y a toujours les anciens navigateurs qui ne mettent pas en œuvre ces nouvelles méthodes.

Heureusement, il existe une pratique de script (écrit en JavaScript) - ES5-cale - qui met en œuvre ces méthodes manuellement dans des environnements où ils n'existent pas.

Cependant, je ne suis pas sûr de la façon de fournir de l'ES5-shim... Devrais-je viens de "donner" à tous les navigateurs, comme suit:

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

Ou dois-je inclure un chèque à l'ordre de "déranger" les navigateurs qui en ont vraiment besoin, comme suit:

<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>

(Je suis à l'aide d' Function.prototype.bind afin de vérifier si un navigateur implémente toutes les nouvelles ECMAScript 5 méthodes. Selon le tableau de compatibilité qui j'ai lié ci-dessus, bind est le "dernier bastion" quand il s'agit de la mise en œuvre de ECMAScript 5 méthodes.)

Bien sûr, pour cela cale pour être efficace, il doit être exécuté avant tous les autres scripts, ce qui signifie que nous voulons inclure le mentionnés ci-dessus les éléments de SCRIPT début de la page (dans la TÊTE, avant tous les autres éléments de SCRIPT).

Ce deuxième exemple être un bon moyen de fournir ECMAScript 5-cale pour les navigateurs? Est-il un meilleur moyen de le faire?

23voto

tkone Points 8216

ES5-Shim ne cédera que les éléments que les navigateurs ne mettent pas en œuvre. Il suffit donc de les donner à tous les navigateurs. Il gérera la détection de ce qui doit être ajusté et de ce qui ne l'est pas.

Mais faites attention aux mises en garde indiquées sur les cales qui ne fonctionnent pas correctement dans certains cas. J'ai eu des problèmes avec cela dans le passé et cela provoque une tonne de douleur jusqu'à ce que vous réalisiez que la réponse était super simple ...

13voto

silversky Points 185

Cela semble fonctionner pour moi:

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

8voto

Kris Kowal Points 1845

À l'heure actuelle, la solution qui fonctionne le mieux avec ES5-Shim est d'utiliser la bibliothèque dans tous les environnements et lui permettre de détecter les fonctions qu'il doit corriger au moment de l'exécution. Il serait encore mieux de le livrer à partir d'une communauté CDN afin de maximiser la cache du site de hits.

Cela étant dit, il est ouvert la possibilité de créer des systèmes qui combine la détection de fonctionnalité, de l'agent d'empreinte digitale, et de la dynamique de regroupement pour générer automatiquement et livrer ciblée cale sous-ensembles. L'ampleur du problème s'étend bien au-delà de l'ES5-Shim et pourrait être appliqué à toutes sortes de cales.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X