innerHTML 的一些問題
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
innerHTML 屬性的使用非常流行,因?yàn)樗峁┝撕?jiǎn)單的方法完全替代一個(gè) HTML 元素的內(nèi)容。另外一個(gè)方法是使用 DOM Level 2 API(removeChild, createElement, appendChild)。但很顯然,使用 innerHTML 修改 DOM tree 是非常容易且有效的方法。然而,你需要知道 innerHTML 有一些自身的問題:
還有幾個(gè)其他次要的缺點(diǎn),也值得一提的:
我更關(guān)注與使用 innerHTML 屬性相關(guān)的安全和內(nèi)存問題。很顯然,這不是新問題,已經(jīng)有能人圍繞這些中的某些問題想出了方法。 Douglas Crockford 寫了一個(gè)清除函數(shù),該函數(shù)負(fù)責(zé)中止由于 HTML 元素注冊(cè)事件處理函數(shù)引起的一些循環(huán)引用,并允許垃圾回收器(garbage collector)釋放與這些 HTML 元素關(guān)聯(lián)的內(nèi)存。 從 HTML 字符串中移除 script 標(biāo)簽并不像看上去那么容易。一個(gè)正則表達(dá)式可以達(dá)到預(yù)期效果,雖然很難知道是否覆蓋了所有的可能性。這里是我的解決方案:
現(xiàn)在,讓我們將這兩種技術(shù)結(jié)合在到一個(gè)單獨(dú)的 setInnerHTML 函數(shù)中,并將 setInnerHTML 函數(shù)綁定到 YUI 的 YAHOO.util.Dom 上:
如果此函數(shù)還應(yīng)有其他任何內(nèi)容或者在正則表達(dá)式中遺漏了什么,請(qǐng)讓我知道。 很明顯,在網(wǎng)頁上還有很多其他注入惡意代碼的方法。setInnerHTML 函數(shù)僅能在所有 A-grade 瀏覽器上規(guī)格化 該文章在 2010/8/13 18:51:58 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |