2013-07-29 40 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

當然,但我說,這是值得一試,因爲這是使用標記名直接.. –