function setInnerHTML (el, htmlCode) {  
var ua = navigator.userAgent.toLowerCase();  
if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) {  
htmlCode = '<div style="display:none">for IE</div>' + htmlCode;  
htmlCode = htmlCode.replace(/<script([^>]*)>/gi,  
'<script$1 defer>');  
el.innerHTML = htmlCode;  
el.removeChild(el.firstChild);  
} else {  
var el_next = el.nextSibling;  
var el_parent = el.parentNode;  
el_parent.removeChild(el);  

if (el_next) {  
el_parent.insertBefore(el, el_next)  
} else {  
el_parent.appendChild(el);  
}  
el.innerHTML = htmlCode;  
}  
} 这段代码可以指定innerHTML, 并支持其中的脚本, 我觉得其实现的方法很好
但有一个问题,火狐下, 将innerHTML为下面代码
<script>alert(0)</script><script src='aa.js'/></script>
结果先执行的是aa.js里面的代码, 而ie中是正常的, 希望知道其中的原因和解决方法

解决方案 »

  1.   

    FF3也有DEFER了.加了应该就好了.
      

  2.   

    谢谢,不过还是不行
    我把代码改成这样function setInnerHTML (el, htmlCode) {  
    var ua = navigator.userAgent.toLowerCase();  
    htmlCode=htmlCode.replace(/<script([^>]*)>/gi,'<script$1 defer>');  
    if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) {  
    htmlCode='<div style="display:none">for IE</div>' + htmlCode;  
    el.innerHTML = htmlCode;  
    el.removeChild(el.firstChild);  
    } else {
    var el_next = el.nextSibling;  
    var el_parent = el.parentNode;  
    el_parent.removeChild(el);  
    el.innerHTML = htmlCode;  
    if (el_next) {  
    el_parent.insertBefore(el, el_next)  
    } else {  
    el_parent.appendChild(el);  
    }  
    }  
      

  3.   

    不好意思.那个defer是在FF3.5才加上的.