私の Web アプリの UI は、ほとんどが優れた Knockout.js で構築されています。IE7 互換モードで IE8 にいくつかのレイアウト エラーが表示されます。次のように標準モードを強制するためにメタタグを追加しようとしました:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
ただし、IE9 互換ビュー (一部のユーザーが設定していると想定する必要があります) の下の IE9 では、Knockout がバインディングを行うときにエラーが発生します。
DOM 例外: INVALID_CHARACTER_ERR (5)
DOM要素が作成される方法に関係するため、ネット上でこのエラーへの参照をたくさん見つけましたが、明らかに私はこれを制御していません.Knockoutはそうです.
Knockout.js が DOM を構築する方法とも互換性のある、IE の現在および将来のすべてのバージョンを標準モードでレンダリングするように強制 (または奨励) するための、堅牢で最小限のハックな方法は何ですか? また、IE9 が好まない Knockout.js がここで行っていることを正確に説明できる人はいますか? どうもありがとう。
アップデート:
マークアップで少なくとも 1 つの問題を特定しました。ラジオボタンのペアがあります:
<input type="radio" data-bind="checked: Gender, attr: { name: 'gender-' + ID() }" value="@((int)Sex.Male)" />
<span>Male</span>
<input type="radio" data-bind="checked: Gender, attr: { name: 'gender-' + ID() }" value="@((int)Sex.Female)" />
<span>Female</span>
このラジオ ボタンのペアの name 属性は、「gender-」と現在バインドされているビュー モデルの ID として生成されます。これは、このラジオ ボタンのペアの複数のインスタンスを持つ深い階層があるためです。Knockout で name 属性を生成しているため、マークアップの入力に対してそれを指定していません。「joe」などの手動の名前も追加すると、これはブラウザ モードで正しくバインドされます: 「IE9 互換表示」 . つまり、互換モードの場合、name 属性がないため、ラジオ ボタンが IE によって無効であると見なされているようです。ただし、ブラウザモード「IE9」で動作します。
また、これは特に IE-edge メタ タグに関連するものではなく、互換表示に切り替えるたびに失敗しますが、次の質問は、そのメタ タグがブラウザの設定を上書きしないのはなぜですか?