国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

js innerHTML 的一些問(wèn)題的解決方法

2024-05-06 14:17:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
然而,你需要知道 innerHTML 有一些自身的問(wèn)題: 

1、當(dāng) HTML 字符串包含一個(gè)標(biāo)記為 defer 的 script 標(biāo)簽(<script defer>…</script>)時(shí),如 innerHTML 屬性處理不當(dāng),在 Internet Explorer 上會(huì)引起腳本注入攻擊。 
2、設(shè)置 innerHTML 將會(huì)破壞現(xiàn)有的已注冊(cè)了事件處理函數(shù)的 HTML 元素,會(huì)在某些瀏覽器上引起內(nèi)存泄露的潛在危險(xiǎn)。 

還有幾個(gè)其他次要的缺點(diǎn),也值得一提的: 

1、你不能得到剛剛創(chuàng)建的元素的引用,需要你手動(dòng)添加代碼才能取得那些引用(使用 DOM APIs)。 
2、你不能在所有瀏覽器的所有 HTML 元素上設(shè)置 innerHTML 屬性(比如,Internet Explorer 不允許你在表格的行元素上設(shè)置innerHTML 屬性)。 
我更關(guān)注與使用 innerHTML 屬性相關(guān)的安全和內(nèi)存問(wèn)題。很顯然,這不是新問(wèn)題,已經(jīng)有能人圍繞這些中的某些問(wèn)題想出了方法。 

       Douglas Crockford 寫(xiě)了一個(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ù)期效果,雖然很難知道是否覆蓋了所有的可能性。這里是我的解決方案: 
/<script[^>]*>[/S/s]*?<//script[^>]*>/ig
現(xiàn)在,讓我們將這兩種技術(shù)結(jié)合在到一個(gè)單獨(dú)的 setInnerHTML 函數(shù)中,并將 setInnerHTML 函數(shù)綁定到 YUI 的 YAHOO.util.Dom 上:
YAHOO.util.Dom.setInnerHTML = function (el, html) {
    el = YAHOO.util.Dom.get(el);
    if (!el || typeof html !== 'string') {
        return null;
    } 
    // 中止循環(huán)引用
    (function (o) {

        var a = o.attributes, i, l, n, c;
        if (a) {
            l = a.length;
            for (i = 0; i < l; i += 1) {
                n = a[i].name;
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 海兴县| 长武县| 栾川县| 微山县| 万州区| 和平县| 沁源县| 贵州省| 丹寨县| 济宁市| 焦作市| 明光市| 腾冲县| 广南县| 松江区| 宣化县| 正安县| 兴隆县| 蚌埠市| 绵阳市| 南投市| 东城区| 武城县| 资中县| 昂仁县| 万荣县| 枞阳县| 集贤县| 洞口县| 亳州市| 嵊州市| 正镶白旗| 江源县| 永胜县| 来凤县| 延吉市| 邛崃市| 江阴市| 眉山市| 新宾| 梁河县|