【问题标题】:Determine which custom HTML tag is offending IE8确定哪个自定义 HTML 标记违反了 IE8
【发布时间】:2013-07-29 19:22:20
【问题描述】:

我们在 angular.js 应用程序中使用了大量自定义标签,我正试图让 IE8 识别它们。设置:

  • 角度 (1.1.5)
  • HTML5模式
  • 在很多情况下对指令使用自定义标签(我们不是Replacing 它们)
  • 使用 IE-shiv.js 向 IE8 注册自定义标签

这是一个很大的应用程序 - 我们在 IE-shiv.js 中在 IE 中注册了 50 多个自定义标签(我们喜欢使用自定义标签的标记的易读性)。我已经多次浏览该应用程序,寻找忘记注册的标签,但我仍然收到Error: Unexpected call to method or property access.undefined。我目前正在打开和关闭应用程序的某些部分以查找有问题的标签......但感觉可能有更好的方法:

我可以检测到哪个自定义 HTML 标记触发了 IE8 中的错误吗? 是否有一些鬼鬼祟祟的方法 - 猴子打孔 document.createElement 或向某些内部 angular 指令添加 try/catch,也许?

【问题讨论】:

  • 我隐约认为你想要一个带有样式的 XML 文件...
  • 值得指出的是,HTML5 规范明确规定 使用自定义标签,因为可能与未来可能引入的实际 HTML 标签发生冲突。目前正在开发自定义标签规范,要求自定义标签以x- 开头以避免冲突,但尚未最终确定。
  • WRT 未来标记名冲突:一种将可能性降至几乎为零的方法是始终为指令名称添加前缀,就像 Angular 的核心指令所做的那样:ng-viewng-repeat 等。

标签: html angularjs internet-explorer-8


【解决方案1】:

加载文档后运行此 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));
} 

【讨论】:

  • 正是我希望学习的那种东西。对异步加载的 DOM 元素运行检查有点棘手,但很有帮助。
  • 在 Alohci 代码中,如果您想修复 ie ajaxian.com/archives/…
  • 谢谢 - 谢谢 - 我以为我删除了所有自定义元素 - 但是使用这个脚本我又做了一次检查......我错过了一个......
【解决方案2】:

我在指令中遇到过这种情况。我构建了一些自定义指令并使用了限制:“AE”。然后我将 HTML 中的指令用作元素,例如:

 <my-directive>

我将指令更改为使用属性并且它正在工作。

 <div my-directive> 

简而言之,IE 无法识别新元素。有一些技巧可以让它工作,但我只是避开了元素并一直在使用属性。希望你的问题就这么简单,否则IE8可能会让你刺伤自己的眼睛!!!

【讨论】:

  • 我想继续直接使用 tagName - 这就是我们使用 IE-shiv.js 预注册所有自定义标签的原因 - 请参阅:github.com/angular-ui/angular-ui/tree/master/common/ieshiv
  • 当然,但我想说的是值得检查,因为这是我在直接使用 tagName 时在 IE 中收到的错误消息..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 2023-02-10
  • 2014-03-23
  • 1970-01-01
相关资源
最近更新 更多