ECMAScript 第 5 版 (2009 年 12 月リリース) では、多数の新しいメソッドが導入されています (詳細については、この表を参照してください)。ただし、これらの新しいメソッドを実装していない古いブラウザーがまだ存在します。
幸いなことに、(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 メソッドの実装に関しては「最後の砦」です。)
もちろん、この shim を有効にするには、他のすべてのスクリプトの前に実行する必要があります。つまり、上記の SCRIPT 要素をページの早い段階 (HEAD 内、他のすべての SCRIPT 要素の前) に含める必要があります。
では、この 2 番目の例は、ECMAScript 5-shim をブラウザーに提供する良い方法でしょうか? それを行うより良い方法はありますか?