2013-07-29 3 views
3

Мы используем массу пользовательских тегов в нашем приложении angular.js, и я пытаюсь получить IE8, чтобы узнать их все. Установка:Определите, какой пользовательский тег HTML нарушает IE8

  • Угловое (1.1.5)
  • режим HTML5
  • Использование пользовательских тегов директив во многих случаях (и мы не R eplacing их)
  • Использование IE-shiv.js для регистрации пользовательских тегов с помощью IE8

Это большое приложение - мы регистрируем более 50 пользовательских тегов в IE в IE-shiv.js (нам нравится, насколько разборчиво разметка с пользовательскими тегами). Я несколько раз проделывал это приложение, ища теги, которые забыл зарегистрировать, но я все еще получаю Error: Unexpected call to method or property access.undefined. В настоящее время я включаю и выключаю части приложения, но обнаруживаю, что может быть лучший способ:

Могу ли я определить, какой пользовательский тег HTML вызвал ошибку в IE8? Есть ли какой-нибудь подлый способ - обезглавливание документа document.createElement или добавление try/catch к некоторой внутренней угловой директиве, возможно?

+0

Я смутно думаю, что вы хотите, файл XML с моделированием ... –

+0

стоит отметить, что HTML5 Spec явно говорит * не * использовать пользовательские теги из-за возможных конфликтов с будущими реальными HTML тегов, которые могут быть введены , В настоящее время разрабатывается специальная спецификация тегов, для которой пользовательские теги должны начинаться с 'x-', чтобы избежать этого конфликта, но он еще не завершен. – Spudley

+0

Конфликты будущих тэгов WRT: один подход к минимизации вероятности до почти нуля - это всегда имя префикса директивы, так как основные директивы angular: 'ng-view',' ng-repeat' и т. Д. – peteorpeter

ответ

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)); 
} 
+0

Точно такое, что я надеялся узнать. Немного сложно запустить проверку асинхронно загруженных элементов DOM, но полезно. – peteorpeter

+0

В коде Alohci вы можете заменить «alert» на «document.createElement», если вы хотите исправить все ваши собственные теги, т. Е. <9. Вы можете Подробнее о: http: // ajaxian.com/archives/add-custom-tags-to-internet-explorer-the-official-way – CtrlX

+0

спасибо - спасибо - я думал, что удалил все пользовательские элементы, но с этим скриптом я просто сделал еще один чек и ... Я пропустил один ... – Bogdan

1

У меня было это с директивами. Я построил некоторые пользовательские директивы и использовал ограничение: «AE». Я тогда использовал директиву в HTML как элемент, например:

<my-directive> 

Я изменил директиву использовать атрибут, и она работает.

<div my-directive> 

Иными словами, IE не распознает новые элементы. Есть трюки, чтобы заставить это работать, но я просто избегал элементов и использовал атрибуты. Надеюсь, ваша проблема будет такой простой, иначе IE8 может заставить вас ударить себя в глаза !!!

+0

Я хотел бы продолжать использовать tagName напрямую - вот почему мы используем IE-shiv.js для предварительной регистрации всех пользовательских тегов - см .: https://github.com/angular-ui/angular-ui/tree/master/common/ieshiv – peteorpeter

+0

Sure , но я говорю, что стоит проверить, что это сообщение об ошибке, которое я получил в IE при непосредственном использовании имени tagName. –

Смежные вопросы