在我的jsp页面中,我在<head>
标记中有以下代码:
<script type="text/javascript"
src="<%=request.getContextPath()%>/static/js/common/common.js"></script>
<script type="text/javascript">
// Function for Suppressing the JS Error
function silentErrorHandler() {return true;}
window.onerror=silentErrorHandler;
</script>
如果在此之后在jsp页面上执行了一些JavaScript,那么我猜silentErrorHandler()
将不会有任何影响。即错误仍然会显示在页面上。这是正确的吗?因为错误正在显示,但不确定为什么。问题的第二部分是这样的:
错误是
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; AskTbFXTV5/5.9.1.14019)
Timestamp: Fri, 7 Jan 2011 21:26:23 UTC
消息:对象不支持此属性或方法
生产线:613
字符:1
编码:0
统一资源标识符:http://localhost:9080/Claris/static/js/common/common.js
最后,第613行指出
document.captureEvents(Event.MOUSEUP);
在IE8上有错误。在Mozilla和IE7上运行良好。任何建议都将非常有用
2条答案
按热度按时间f3temu5u1#
它在IE7中是如何工作的?
captureEvents()
是Netscape 4时代的一个令人不快的、不可靠的事件接口,它总是令人怀疑,不应该用于任何用途。IE和Firefox的新版本都不再支持它。听起来你的脚本需要一些相当严重的更新。添加一个错误接收器也是一个非常糟糕的主意。将错误掩盖起来会使错误查找工作更加困难,并且不会影响普通用户(因为他们有浏览器的默认设置,不打开JS错误报告)。
因此,在较新的IE8中,我们可以执行
document.onmouseup = someFunction;
,而不必执行document.captureEvents(Event.MOUSEUP);
,对吗?是的,但是这是使用“冒泡”而不是“捕获”。在这种情况下,事件仍然会在后代元素上触发,并且会“冒泡”通过每个祖先元素,直到它到达文档。
“捕获”的思想是祖先元素(文档)可以阻止后代元素得到任何事件通知。实际上,事件捕获并不经常需要,而且是一件痛苦的事情,因为在不同的浏览器上它的实现方式不同。
IE使用
setCapture()
方法。其他现代浏览器使用W3C DOM Events模型,将true
作为第三个参数传递给addEventListener()
(这不适用于DOM0事件模型,将函数分配给onclick
等)。captureEvents()
是古代Netscape的做法。其他较老的浏览器或小众浏览器根本没有事件捕获功能。一般情况下:最好避免事件捕获。检查脚本是否确实需要它。可能不需要:如果这是一个打算在Netscape 4(retch)上运行的脚本,即使它不需要捕获,它也可能使用了
captureEvents()
,因为Netscape事件模型中有一些损坏的部分不能正确地与冒泡一起工作。gr8qqesn2#
错误指向脚本文件中的一行,该脚本文件在设置onerror抑制之前加载。
如果你把它放在你包含common.js之前,它应该工作。
也就是说,您应该真正尝试找到错误并修复它......或者如果异常不是真正的问题,则将其 Package 在try/catch中。
例如,在您的情况下(使用IE),您将得到一个错误,因为IE中的document没有
document.captureEvents
属性/方法。