前几天公司有一个页面在IE下一打开就弹出这样的错误:
Stack overflow at line: 0
一般来说,这是Javascript出现循环调用时报的错。由于页面上的代码比较多,无法一下子判断出是哪里的问题,我只好一段一段地删。然而,即使我把所有的<script>标签都删了,这个错误仍然存在。我又怀疑这是嵌入的外部文件导致的问题,于是又把所有的<iframe>标签给删了,但问题依旧。
难道HTML也会导致循环调用吗?其实我算漏了一个地方,就是HTML元素的事件,可以通过标签的“onEventName”属性指定,比如“onclick”、“onmouseover”等。这下终于让我找到了线索:页面上的一张图片设置了“onerror”事件。代码大概如下:
<img src="a.jpg" onerror="this.src='b.jpg'" />
onerror事件用得比较少,但它本身并不会造成什么问题。然而,这里的“a.jpg”和“b.jpg”都是不可访问的。访问“a.jpg”的时候出错触发了onerror事件,把图片的地址设为“b.jpg”,问题就在于“b.jpg”也不可访问,又触发了onerror事件,再次设为“b.jpg”,这自然也是不可访问,继续触发onerror事件,如此往复。
评论 (2条)