让innerHTML里的script跑起来

  直接设置容器的innerHTML,如果设置的内容里面包含了script代码块,是不会执行的,所以需要做一些处理

  示例代码如下,firefox需要获取script标签,eval里面的内容,ie就简单了,在设置innerHTML前替换<script为<script defer就行了

<div id="dv"></div>
<script>
window.onload=function(){
  var dv=document.getElementById('dv');
  var s='a23<script>alert(123)</'+'script>afafe<script>alert(456)</'+'script>';  
  if(window.navigator.userAgent.indexOf("Firefox")>=1)  { //针对FF
    dv.innerHTML=s;
    var scripts = dv.getElementsByTagName("script"); 
    for(var i=0;i<scripts.length;i++){ //一段一段执行script 
        eval(scripts[i].innerHTML); 
    } 
  }else if(window.navigator.userAgent.indexOf("MSIE")!=-1) { 
    s=s.replace(/<script/gi,"<script defer ")//因为 <script defer>可以在IE上直接运行,所以把所有的script标签都替换成defer标记的script 
    dv.innerHTML=s; 
  } 
}
</script>

 

加支付宝好友偷能量挖...


原创文章,转载请注明出处:让innerHTML里的script跑起来

评论(0)Web开发网
阅读(244)喜欢(1)JavaScript/Ajax开发技巧