3

angular.js アプリで大量のカスタム タグを使用しており、IE8 にそれらすべてを認識させようとしています。セットアップ:

  • 角度 (1.1.5)
  • HTML5 モード
  • 多くの場合、ディレクティブにカスタム タグを使用します (Rそれらを置き換えることはありません)。
  • IE-shiv.js を使用してカスタム タグを IE8 に登録する

これは大きなアプリです。IE の IE-shiv.js で 50 以上のカスタム タグを登録しています (カスタム タグを使用したマークアップの読みやすさが気に入っています)。登録し忘れたタグを探してアプリを何度か使用しましたが、まだError: Unexpected call to method or property access.undefined. 現在、問題のタグを見つけるためにアプリの一部をオンまたはオフにしています...しかし、もっと良い方法があるように感じます:

IE8 でエラーを引き起こしたカスタム HTML タグを検出できますか? document.createElement をモンキー パンチするか、内部の angular ディレクティブに try/catch を追加するなど、卑劣な方法はありますか?

4

2 に答える 2

9

ドキュメントが読み込まれたら、この JS を実行します。/パーサーが終了タグに遭遇したときに認識されないすべての要素に対して IE8 で作成された、文字で始まるタグ名を持つすべての要素が検索されます。

var list = document.getElementsByTagName('*');
for (var i = 0, len = list.length; i < len ; i++) {
  if (list[i].tagName.indexOf('/') === 0)
    alert(list[i].tagName.substr(1));
} 
于 2013-07-29T20:10:06.593 に答える
1

ディレクティブでこれが発生しました。私はいくつかのカスタム ディレクティブを作成し、restrict: "AE" を使用していました。次に、HTML のディレクティブを要素として使用しました。次に例を示します。

 <my-directive>

属性を使用するようにディレクティブを変更しましたが、機能しています。

 <div my-directive> 

つまり、IE は新しい要素を認識しません。これを機能させるにはコツがありますが、要素を避けて属性を使用しています。うまくいけば、あなたの問題はこのように単純です。

于 2013-07-29T19:40:38.983 に答える