ie的新版本js的window.onerror.caller.caller最终总是指向自身导致死环
2013-04-09 21:09
204 查看
--------测试代码-----------
<html>
<title></title>
<body>
<textarea id="test">
出错代码;
</textarea>
<input type="button" onclick="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新版本对某些机制进行修改了.
<html>
<title></title>
<body>
<textarea id="test">
出错代码;
</textarea>
<input type="button" onclick="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新版本对某些机制进行修改了.
相关文章推荐
- easyui-window控件,拖拽时导致整个IE奔溃
- window.onload兼容ie和ff以及多次调用导致相冲突的解决方法
- IE的子页面window对象指向(BUG)
- Windows XP SP2的WRSF安全特性导致IE使用window.open和window.showModalDialog的status=no无法关闭状态栏
- [工作问题总结]window.open导致IE自动关闭问题总结[2]
- IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素
- window.onload兼容ie和ff以及多次调用导致相冲突的解决方法
- CSDN的rich text编辑器在IE7下总是导致IE crash
- [工作问题总结]window.open导致IE自动关闭问题总结[1]
- window.onerror()的用法与实例分析
- innerHTML属性导致未知的运行时错误ie bug
- note : Creates a hidden IE window
- 火狐和IE的window.event对象详解
- PHP关于IE下的iframe跨域导致session丢失问题解决方法
- PHP关于IE的iframe跨域导致session丢失
- 每次打开IE总是弹出管理加载项?
- window下nginx的proxy_pass指向localhost访问时非常慢
- ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
- 让人抓狂的问题:运行WPF Browser Application(XBAP)导致PresentationHost(IE)崩溃
- 关于IE某些原因导致下拉列表弹出阻止窗口的解决办法