37

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 メソッドを実装しているかどうかを確認するために使用しています。上記でリンクした互換性テーブルによると、bindECMAScript 5 メソッドの実装に関しては「最後の砦」です。)

もちろん、この shim を有効にするには、他のすべてのスクリプトのに実行する必要があります。つまり、上記の SCRIPT 要素をページの早い段階 (HEAD 内、他のすべての SCRIPT 要素の前) に含める必要があります。

では、この 2 番目の例は、ECMAScript 5-shim をブラウザーに提供する良い方法でしょうか? それを行うより良い方法はありますか?

4

3 に答える 3

23

ES5-Shim は、ブラウザーが実装していない部分のみを shim するため、すべてのブラウザーに渡してください。シミングが必要なものとそうでないものの検出を処理します。

ただし、場合によっては、どのシムが正しく機能しないかについて記載されている警告に注意してください。私は過去にそれで問題を抱えていましたが、答えが非常に単純であることに気付くまで、それは多くの苦痛を引き起こします...

于 2012-01-04T19:34:48.587 に答える
14

これは私にとってはうまくいくようです:

<!--[if lt IE 9]><script src="java/es5-shim.min.js"></script><![endif]-->
于 2013-08-31T01:52:55.883 に答える
8

現在、ES5-Shim で最適に機能するソリューションは、すべての環境でライブラリを使用し、実行時にパッチを適用する必要がある機能を検出できるようにすることです。クロスサイト キャッシュ ヒットを最大化するには、コミュニティ CDN から配信することをお勧めします。

そうは言っても、特徴検出、エージェント フィンガープリンティング、および動的バンドリングを組み合わせて、対象となる shim サブセットを自動的に生成および配信するシステムを作成するチャンスはまだあります。問題の範囲は ES5-Shim だけにとどまらず、あらゆる種類の shim に適用できます。

于 2012-01-04T19:49:01.450 に答える