5

私たちのサイトはほぼ完全にノックアウト状態に陥っており、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バインディングを使用して回避策を管理しましたが、そのようなものは「ポリフィル」から「ポリ」を取り除きます。一度書いたら忘れることができる何かを望んでいます。)

4

1 に答える 1

2

私が同じ問題を解決した方法は、ほとんどの jQuery プラグインと動作全般をノックアウト バインディング ( http://knockoutjs.com/documentation/custom-bindings.html ) でラップすることでした。たとえば、必要に応じて<input data-bind="placeholder:'Some Placeholder Text'"/>単に属性を設定するか、IEハックを行うなど、各入力で使用するプレースホルダー「バインディング」がありました。placeholder

より広範な解決策は、ノックアウト バインディング プロバイダー ( http://www.knockmeout.net/2011/09/ko-13-preview-part-2-custom-binding.html ) を拡張することです。バインディング プロバイダーは、DOM をトラバースし (ロード時と動的ロード時の両方)、バインディングを識別するものです。デフォルトでは、基本的にデータ バインド属性と ko コメントのみを検索することを意味しますが、これを変更して、プレースホルダー、日付または数値入力の入力タイプなどの属性も検索し、IE ハックを追加することもできます。

于 2013-03-04T00:20:13.910 に答える