2011-01-07 343 views
0

在我的jsp页面,我必须在标签,下面的代码:的javascript:对象不支持此属性或方法

<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> 

如果有一些JavaScript后此JSP页面上执行的,则我猜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上运行良好。 任何建议将会非常有帮助

回答

1

您的错误指向脚本文件中的一行,该脚本文件在设置onerror抑制之前加载。

如果你在包含common.js之前加入它,它应该可以工作。

这就是说,你应该真的尝试找到错误并修复它......或者将它包装在try/catch中,如果异常不是确实是的问题。

例如在你的情况下(使用IE)你会得到一个错误,因为document在IE中没有document.captureEvents属性/方法。

+0

谢谢。但是在IE7中它是如何工作的?如果document.captureEvents不是IE中的属性/方法? – Victor 2011-01-07 21:54:07

3

它怎么在IE7中工作?

captureEvents()是一个不愉快,不可靠的事件接口从Netscape 4时代,总是怀疑,不应该用于任何事情。 IE和Firefox的较新版本都支持它。这听起来像你的脚本需要一些相当严重的更新。

添加错误接收器也是一个非常糟糕的主意。在地毯下清扫你的错误会使你的错误查找工作更加困难,并且不会影响普通用户(因为他们将有浏览器的默认设置为不打开JS错误报告)。

所以在较新的IE8中,我们可以做document.onmouseup = someFunction;而不必做document.captureEvents(Event.MOUSEUP);对不对?

是的,但这是使用'冒泡'而不是'捕获'。在这种情况下,这些事件仍然会在后代元素上被触发,并且会通过每个祖先“冒泡”直到它碰到文档。

“捕获”的想法是,祖先元素(文档)可以阻止后代元素获取任何事件通知。事件捕获在实践中并不经常需要,而且很痛苦,因为它在不同的浏览器上完成的方式不同。

IE使用setCapture()方法。其他现代浏览器使用W3C DOM Events模型,将true作为第三个参数传递给addEventListener()(这不适用于将函数分配给onclick等的DOM 0事件模型)。 captureEvents()是如何在古代网景中完成的。其他较老的或小众浏览器根本没有事件捕获的手段。

一般来说:最好避免事件捕获。检查脚本确实需要它。可能不是:如果这是一个意图在Netscape 4上运行的脚本(retch),即使它不需要捕获,它也可能使用captureEvents(),因为Netscape事件模型中有些部分不能正常工作冒泡。

相关问题