IE报stack overflow的几种可能性

今天把本来一直在Firefox下测试开发的网页换在IE下面测试,结果发现许多错误,在Firefox下就能正常使用
1、一个框架,我本来只使用了id属性,没有加name属性,结果在Firefox中涉及到此框架的操作能正常进行,但在IE中不行,我只得又对此frame加上了name属性,结果IE正常了。

2、事件属性名与Javascript函数名同名,导致IE报Stack overflow错误
引用

<form name="form" action="{$body/form/action}" method="post" οnsubmit="return onFormSubmit()">
<script language="javascript">
<![CDATA[
function onFormSubmit()
{
    if (document.form.mno.value.length < 1)
    {
        alert("厂商编号不能为空");
        document.form.mno.focus();
        return false;
    }
    if (document.form.mname.value.length < 1)
    {
        alert("厂商名称不能为空");
        document.form.mname.focus();
        return false;
    }
    if (document.form.pname_contact.value.length < 1)
    {
        alert("联络人不能为空");
        document.form.pname_contact.focus();
        return false;
    }
    if (document.form.mtel.value.length < 1)
    {
        alert("厂商电话不能为空");
        document.form.mtel.focus();
        return false;
    }
    return true;
}
]]>         
</script>
......

上面的代码,是现在的代码,可以正常运行,但如果把函数名onFormSubmit()改为onsubmit(),结果就会报Stack overflow错,在Firefox下则正常使用。那么为什么在IE下会报错呢?查了半天GOOGLE和BAIDU,死活找不到答案,但在一个不起眼的网页中,上面说的如下:
引用

有趣的网页,此网页上含有一串非典型代码,点击后IE会关掉所有的IE窗口(放心没病毒)
关于<img src="::" onError="this.src='::';"> 网上的高手是这样解释的。

1)使用一个无效的src建立一个映射(image); 
2)IE尝试着去显示要映射的图片,但是这是一个无效的src,系统击活了onError-event; 
3)系统对src属性进行检查,但又重新设置到原来的无效的src; 
4)有返回执行第二步。 

从上可得之,这是一个无限循环,每次onError-event返回的地址都被存入堆栈中,直到堆栈被填满并溢出。 

各种不同的错误会导致各种动态链接库的不同溢出漏洞。

其他几个我就不知道了。


由此看来,IE的智能程度确实有待加强,因为onsubmit属性名和onsubmit()函数名一样,导致IE不停地循环调用,最终导致Stack overflow

不知道IE7正式推出后,会不会有所改善。




该错误只在IE中出现,出现该提示的原因主要有两种:

1. 重定义了系统的触发事件名称作为自定义函数名如:  onclick / onsubmit …  都是系统保留的事件名称,不允许作为重定义函数名称。

2. 出现死循环,都提示:Stack overflow at line: 0 , 如:在图片对象定义了 onerror 事件的循环处理、

<img src=”http://images.cnblogs.com/a.gif” οnerrοr=”this.src=’/image/block.gif’” />

这里并不是说 /images/a.gif 不存在, 可能是由于网络原因造成, 这时会执行 onerror 事件,  调用 /images/block.gif 去做当前图片的路径, 但如果当前 /image/block.gif 这个图片文件不存在, 再或者由于网络原因, ‘/image/block.gif’ 下载又出现错误时, 就出现了死循环。

上面哪个例子一般写成下面这种形式比较保险

<img src=”http://images.cnblogs.com/a.gif” οnerrοr=”this.error = null;this.src=’/image/block.gif’” />

所以在处理 onerror 事件时,要考虑是否是出现这样的问题。

” Stack overflow at line: 0 “ 该错误不是一直出现,是有时会出现, 是网络不正常导致死循环引起的, 查了好半天, 最后才找到这个原因,做下记号吧, 给有需要的人。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值