2012-01-04 17 views
34

ECMAScript Quinta edición (lanzada en diciembre de 2009) presenta una serie de métodos nuevos (consulte this table para obtener más información). Sin embargo, todavía hay navegadores más antiguos que no implementan esos nuevos métodos.Cómo proporcionar ECMAScript 5 (ES 5) -shim?

Afortunadamente, existe un script conveniente (escrito en JavaScript) - ES5-shim - que implementa esos métodos manualmente en entornos donde no existen.

Sin embargo, no estoy seguro de cómo proporcionar ES5-calce ... ¿Debo "dar" a todos los navegadores, así:

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

O debería incluir un cheque con el fin de solamente "molestan" los navegadores que realmente lo necesitan, así:.

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

(estoy usando Function.prototype.bind para comprobar si un navegador implementa todos los nuevos métodos de ECMAScript 5 de acuerdo con la tabla de compatibilidad que he vinculado anteriormente, es bind el "último bastión" cuando se trata de implementar ECM Ascript 5 métodos.)

Por supuesto, para esta cuña para ser eficaz, tiene que ser ejecutado antes todas las otras secuencias de comandos, lo que significa que queremos incluir los elementos del guión antes mencionados al principio de la página (en el HEAD, antes que todos los demás elementos SCRIPT).

Entonces, ¿este segundo ejemplo sería una buena manera de proporcionar ECMAScript 5-shim a los navegadores? Hay una mejor manera de hacerlo?

Respuesta

22

ES5-Shim solo calzará las partes que los navegadores no implementen, así que simplemente proporciónelas a todos los navegadores. Se encargará de la detección de lo que debe ser recortado y lo que no.

Pero preste atención a las advertencias enumeradas sobre qué calzas no funcionan correctamente en algunos casos. He tenido problemas con eso en el pasado y causa un montón de dolor hasta que te das cuenta de que la respuesta fue muy simple ...

+8

Pero que obligaría a los navegadores compatibles con ES5 (última IE, Chrome, Firefox, pronto Opera) para descargar y ejecutar la cuña que ralentiza la página web innecesariamente . Si puedo evitar esto con un poco de verificación de JavaScript, con mucho gusto lo haré. –

+3

@ ŠimeVidas: Son 8kB. Con el almacenamiento en caché adecuado, no hay nada de qué preocuparse. – You

+0

El rendimiento alcanzado es insignificante, el ES5 Shim ya hace lo que puede para evitar la ejecución innecesaria del código. – JaredMcAteer

8

En la actualidad, la solución que mejor funciona con ES5-Shim es usar la biblioteca en todos los entornos y le permiten detectar qué características necesita parchear en tiempo de ejecución. Sería incluso mejor entregarlo desde un CDN de la comunidad para maximizar los éxitos de caché entre sitios.

Dicho esto, hay una gran oportunidad para crear sistemas que combinen la detección de funciones, la huella digital del agente y la agrupación dinámica para generar y entregar automáticamente subconjuntos de calzas dirigidas. El alcance del problema se extiende más allá de ES5-Shim y podría aplicarse a todo tipo de calzas.

+0

Sí, he notado que [CDNJS] (http://www.cdnjs.com/) lo aloja ... –

12

Esto parece funcionar para mí:

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

¿Qué pasa con los navegadores que no son IE? que no son compatibles con ES5? – Bergi

+3

@ Bergi: No creo que esos realmente existan. –

+1

@RocketHazmat: Supongo que te refieres a "esos apenas se usan", pero existen con seguridad. Tome versiones anteriores a ES5 de los navegadores populares o algunos navegadores integrados o móviles. – Bergi

Cuestiones relacionadas