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中是正常的, 希望知道其中的原因和解决方法
我把代码改成这样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);
}
}
}