让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跑起来