【问题标题】:javascript :Object doesn't support this property or methodjavascript :Object 不支持此属性或方法
【发布时间】:2011-01-07 21:30:43
【问题描述】:

在我的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 上运行良好。 任何建议都会很有帮助

【问题讨论】:

    标签: javascript-events


    【解决方案1】:

    它在 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 的做法。其他较旧或小众的浏览器根本无法捕获事件。

    一般来说:最好避免事件捕获。检查脚本确实需要它。可能不是:如果这是一个打算在 Netscape 4 (reetch) 上运行的脚本,它可能使用了captureEvents(),即使它不需要捕获,因为 Netscape 事件模型的某些损坏部分不起作用正确的冒泡。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 谢谢。但它是如何在 IE7 中工作的呢?如果 document.captureEvents 不是 IE 中的属性/方法?
      • 您是否在 IE8 标准模式下运行?如果是这样,它可能会以“更”严格的模式运行......与 IE7 相比,IE7 可能会出于“兼容性原因”默默吞下它。如果您可以将它放入pastebin.com 并链接到它,我们可以调试它在那里。
      • 所以在较新的 IE8 中,我们可以这样做:document.onmouseup = someFunction;无需做:document.captureEvents(Event.MOUSEUP);对吗?
      • @Kaushik 是正确的。如果你打算做一堆 JavaScript 工作,你可能想研究一个有助于抽象浏览器之间差异的库,比如 jQuery、dojo、mooTools 等。因为它们使一切“正常工作”。 ;-)
      • 谢谢。我知道道场有很多功能。能否请您指向一个链接,以便更轻松地开始?谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2015-07-02
      • 2019-04-09
      • 2013-03-23
      • 1970-01-01
      相关资源
      最近更新 更多