私たちのサイトはほぼ完全にノックアウト状態に陥っており、IE7 (IE6 ではなく) に戻る Internet Explorer を含むすべての主要なブラウザーをサポートする必要があります。
Chrome は、私たちが実際に気にかけているほとんどすべての HTML 5 機能を既にサポートしており、Modernizr は CSS ハックをチャンピオンのように処理します。しかし、ポリフィルに頼らなければならない場合もあります。2 つの注目すべき例は、placeholder
属性と、最近では<details>
要素です。
ほとんどのポリフィルは jQuery プラグインであるか、jQuery プラグインに依存しており、理論的には優れています。残念ながら、それらは動的にロードされるコンテンツを処理するのにも効果的でない傾向があります。これは、ノックアウト (または実際には任意のテンプレート エンジン) を使用する場合に大量に発生します。問題をさらに複雑にしているのは、ノックアウトを真の MVVM として使用していることです。そのため、プラグインをリロードするために多数の JS ハックを利用する適切な場所がありません (これは、私たちのアーキテクチャに関する限り、おそらく良いことですが、これには不満があります。フロント)。
DOMNodeInserted
私たちは、Firefox と IE9 のイベント (非推奨、私は知っています) を使用して、ある程度信頼性の高い実装を考え出すことができました。残念ながら、IE8 では機能しませんでした。従来の IE ではサポートされておらず、これらのブラウザーで複製することはほぼ不可能に思われるからです。onreadystatechange
最初は有望に見えましたが、イベントが発生するのが早すぎる傾向がありreadyState
(明示的にチェックされていても)、いわばポリフィルがターゲットを逃してしまいます。
IE7/IE8 で実際に確実に機能する唯一のオプションは、50 ミリ秒ごとにポリフィルを再実行する繰り返しタイムアウトを使用することでした。残念なことに、これは常に CPU 全体を消費し、それを 100 ミリ秒まで上げると、UI であまりにも顕著な遅延が発生するため、本番環境での使用にはあまり適していません。
では、少なくとも IE7 までのすべての主要なブラウザーで動作する、従来のポリフィル手法を動的コンテンツやノックアウト js のようなテンプレート エンジンと組み合わせる信頼できる方法はありますか?
(FWIW、最終的にノックアウトのafterRender
バインディングを使用して回避策を管理しましたが、そのようなものは「ポリフィル」から「ポリ」を取り除きます。一度書いたら忘れることができる何かを望んでいます。)