2013-07-29 32 views
3

我们在我们的angular.js应用程序中使用了大量的自定义标记,并且我试图让IE8识别它们。设置:确定哪个自定义HTML标记是有问题的IE8

  • 角(1.1.5)
  • HTML5模式
  • 使用自定义标签在许多情况下,指令(和我们不R eplacing他们)
  • 使用IE-shiv.js使用IE8注册自定义标签

这是一个很大的应用 - 我们在IE-shiv.js(我们喜欢用自定义标签对标记进行清晰的标记)在IE中注册50多个自定义标签。我已经经历了几次应用程序,寻找我忘记注册的标签,但我仍然收到Error: Unexpected call to method or property access.undefined。我目前正在开启和关闭部分应用程序以查找违规标签......但感觉好像有更好的方法:

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

+0

我隐约觉得你想要的造型一个XML文件...... –

+0

这是值得指出的是,HTML5规范明确地说,*不*使用自定义标签由于可引入与未来的实际HTML标签的潜在冲突。目前正在开发的自定义标签规范,这就需要自定义标签开始与'X-'以避免冲突,但它尚未确定。 – Spudley

+0

WRT未来标记名冲突:一种方法,以尽量减少到几乎为零的可能性是始终前缀指令名,如角的核心指令做:'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

正是这种事情我希望学习的时候,我在IE浏览器收到错误消息。对异步加载的DOM元素运行检查有点棘手,但很有帮助。 – peteorpeter

+0

在Alohci代码,您可以通过“使用document.createElement”取代“警报”,如果你想解决您所有的自定义标签ISSU在IE <9。您可以通过 了解更多:http:// ajaxian。com/archives/added-custom-tags-to-internet-explorer-the-official-way – CtrlX

+0

谢谢 - 谢谢 - 我以为我删除了所有的自定义元素 - 但是通过这个脚本,我只做了另一个检查,然后......我错过了一个... – Bogdan

1

我有这样的指令发生。我建立了一些自定义指令,并使用restrict:“AE”。然后我用了该指令的HTML作为一个元素,例如:

<my-directive> 

我改变了指令使用的属性,它是工作。

<div my-directive> 

总之,IE不识别新元素。有窍门让这个工作,但我刚刚避免的元素,并已使用属性。希望你的问题是这么简单,否则IE8可能会让你刺伤自己!

+0

我想用继续标记名直接 - 这就是为什么我们使用的是IE-shiv.js预注册所有自定义标签 - 见:https://github.com/angular-ui/angular-ui/tree/master/common/ieshiv – peteorpeter

+0

当然,但我说,这是值得一试,因为这是使用标记名直接.. –