在我的jsp页面中,我在标签中有以下代码:
<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
Message: Object doesn't support this property or method
Line: 613
Char: 1
Code: 0
URI: http://localhost:9080/Claris/static/js/common/common.js
最后,第613行说明了
document.captureEvents(Event.MOUSEUP);
IE8上有错误。在Mozilla和IE7上运行良好。 任何建议都会非常有用
答案 0 :(得分:3)
它如何在IE7中运行?
captureEvents()
是来自Netscape 4时代的令人不快,不可靠的事件界面,它总是令人怀疑,不应该用于任何事情。较新版本的IE和Firefox都不再支持它。听起来你的脚本需要一些相当严肃的更新。
添加错误接收器也是一个非常糟糕的主意。在地毯下清除错误会使您的错误查找工作更加困难,并且不会影响普通用户(因为他们将使用浏览器的默认设置,不会为JS错误打开报告)。
所以在较新的IE8中,我们可以执行
document.onmouseup = someFunction;
而无需document.captureEvents(Event.MOUSEUP);
正确吗?
是的,但那是使用'冒泡'而不是'捕获'。在这种情况下,事件仍将在后代元素上触发,并将“冒泡”通过每个祖先,直到它到达文档。
'捕获'的概念是祖先元素(文档)可以阻止后代元素获得事件的任何通知。在实践中通常不需要事件捕获并且是一种痛苦,因为它在不同的浏览器上以不同的方式完成。
IE使用setCapture()
方法。其他现代浏览器使用W3C DOM事件模型,将true
作为第三个参数传递给addEventListener()
(这不适用于将函数赋值给onclick
等的DOM 0事件模型)。 captureEvents()
是如何在古代网景中完成的。其他较旧的或利基浏览器根本无法捕获事件。
一般来说:最好避免事件捕获。检查脚本确实需要它。可能不是:如果这是一个打算在Netscape 4(retch)上运行的脚本,它可能已经使用captureEvents()
,即使它不需要捕获,因为Netscape事件模型中有一些损坏的部分没有冒泡吧。
答案 1 :(得分:1)
您的错误指向在设置onerror抑制之前加载的脚本文件中的一行。
如果你在包含common.js之前提出它,它应该可以工作。
那就是说,你应该真的尝试找到错误并修复它......或者如果异常不是真的那么将它包装在try / catch中。
e.g。在您的情况下(使用IE),您将收到错误,因为IE中的document没有document.captureEvents
属性/方法。