我用php给html页面传参数content,content里面包括js脚本的,之前有老大指导,我在html判断,如果是IE,直接将<script>替换成<script defer>。如果是其他浏览器,就抽取出来。结果,IE可以显示正常。但是发现用其他浏览器的话,这个js却是跳着来显示的。
html判断是其他浏览器的抽取代码如下:
resText1.innerHTML=s;
   var scripts = resText1.getElementsByTagName("script"); 
   for(var i=0;i<scripts.length;i++){  
  
   eval(scripts[i].innerHTML);php的content如下:
$content = "


<div id='test1' class='06'>

<script>showtime(1,4000);</script>

</div>
<div id='test2' class='11'>

<script>showtime(2,4300);</script>

</div>
<div id='test3' class='20'>

<script>showtime(3,4800);</script>

</div>
<div id='test4' class='26'>

<script>showtime(4,5200);</script>

</div>
<div id='test5' class='40'>

<script>showtime(5,6000);</script>

</div>

"
;我发现如果把js的eval换成alert的话,是可以弹出所有的showtime的。但是如果换成eval的话,就只会执行第1、3、5条js我彻底无语了。后来在eval(scripts[i].innerHTML);前面又加上了一句eval(scripts[i+1].innerHTML);结果就显示四条结果。分别为1、2、4、5条记录。。我彻底无语了谁能告诉我一下到底发生什么事了么?

解决方案 »

  1.   

    eval(scripts[i].innerHTML);
    换成这种试试
    eval('('+scripts[i].innerHTML+')');
      

  2.   

    哈哈,有的对象用eval 执行不了,加个括号就好了。看来不是这的问题吧
      

  3.   

    哎我自己解决了说一下答案吧。。不要让他阑尾了,是这样的,js的兼容性问题来的,需要在前面加多一个无用的空白js,来进行防屏蔽。这样就ok了
      

  4.   

    eval:将内容当做表达式直接运行