ie的新版本js的window.onerror.caller.caller最终总是指向自身导致死环

--------测试代码-----------

<html>

<title></title>
<body>

<textarea id="test">

出错代码;

</textarea>

<input type="button" οnclick="try{window.execScript(test.value,'javascript');}catch(e){} " value = '运行输入框中js代码'/>
<script>


window.onerror = function(sMessage,sUrl,sLine)
{
      var str = window.err_t + "出错了!\n\n";
      if (window.err_t == '初始化页面时') str += "在文件[ " + sUrl + " ]";
      str += "第" + sLine + "行\n" + sMessage + "\n\n";
    var func = window.onerror.caller;
    var index = 0;
    
    while(func!=null){
       str += "[" + index + "] 调用时参数/函数\n";
       for(var i=0;i<func.arguments.length;i++) str += func.arguments[i] + ",";
       str +=  "\n" + func + "\n\n";
       
       if (func  === func.caller) {
            break;//在ie6中不必检测,但是后面版本可能有问题
       }
       
       func = func.caller;
       index++;
       //alert(func.caller);//去掉上面的断点即可发现最后总是指向自己
    }

    alert(str);    
      return true;
}
</script>
</body>

</html>

 

----------------------区别------

这个代码我当时是在ie6的情况下写的.

当时window.onerror.caller子对象的子对象是不会重复的.

而在ie9的测试中,我发现这个代码是死环.好像ie8是没有问题.

 

--------在ie6中这个检测是没必要加的--------

if (func  === func.caller) {
            break;//在ie6中不必检测,但是后面版本可能有问题
}

 

这说明js新版本对某些机制进行修改了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值