ECMAScript Fifth Edition (rilasciato nel dicembre 2009) introduce una serie di nuovi metodi (vedere this table per i dettagli). Tuttavia, ci sono ancora vecchi browser che non implementano questi nuovi metodi.Come fornire ECMAScript 5 (ES 5) -shim?
Fortunatamente, esiste uno script comodo (scritto in JavaScript) - ES5-shim - che implementa manualmente tali metodi in ambienti in cui non esistono.
Tuttavia, io non sono sicuro di come fornire ES5-shim ... Devo solo "dare" a tutti i browser, in questo modo:
<script src="es5-shim.js"></scipt>
O dovrei includere un controllo al fine di solo "fastidio" quei browser che ne hanno davvero bisogno, in questo modo:.
<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>
(sto usando Function.prototype.bind
per verificare se un browser implementa tutti i nuovi ECMAScript 5 metodi Secondo la tabella di compatibilità che ho linkato sopra, bind
è "l'ultimo baluardo" quando si tratta di implementare ECM AScript 5 metodi.)
Naturalmente, per questo spessore per essere efficace, deve essere eseguito prima tutti gli altri script, il che significa che vogliamo includere gli elementi di script di cui sopra menzionati all'inizio della pagina (in HEAD, prima di tutti gli altri elementi SCRIPT).
Quindi, questo secondo esempio sarebbe un buon modo per fornire ECMAScript 5-shim ai browser? C'è un modo migliore per farlo?
Ma sarebbe forzare i browser ES5-compatibile (ultima IE, Chrome, Firefox, presto Opera) per scaricare ed eseguire lo spessore che rallenta la pagina web inutilmente . Se posso evitarlo con un piccolo controllo JavaScript, lo farò volentieri. –
@ ŠimeVidas: è 8kB. Con un corretto caching, non c'è niente di cui preoccuparsi. – You
La performance hit è trascurabile, ES5 Shim fa già tutto il possibile per evitare l'esecuzione di codice non necessaria. – JaredMcAteer