12

有没有办法在 Internet Explorer 7 中调试或跟踪每个 JavaScript 事件?

我有一个阻止文本选择后滚动的错误,我不知道哪个事件或操作会导致错误。例如,我真的很想看看当我移动鼠标时触发了哪些事件。

重新连接源的工作量太大,我有点希望有像嗅探器这样的东西,它可以向我显示所有触发的事件。

4

10 回答 10

11

遍历页面上定义了 onXYZ 函数的所有元素,然后将跟踪添加到它们:

var allElements = document.all; // Is this right? Anyway, you get the idea.

for (var i in allElements) {
    if (typeof allElements[i].onblur == "function") {
        var oldFunc = allElements[i].onblur;
        allElements[i].onblur = function() {
             alert("onblur called");
             oldFunc();
        };
    }
}
于 2008-09-18T13:03:27.827 回答
2

您可能想尝试使用 Visual Studio 2008 及其调试 JavaScript 代码的功能。

如果问题不是特定于 Internet Explorer 7 而是在 Firefox 中也出现,那么调试 JavaScript 代码的另一个好方法是 Firefox 和具有 JavaScript 调试器的Firebug插件。然后,您还可以将语句放入 JavaScript 代码中,然后您可以在 Firebug 的控制台窗口console.log中看到输出,而不是使用有时会弄乱事件链的警报。

于 2008-09-18T10:13:19.000 回答
2

@[nickf] - 我很确定document.all是 Internet Explorer 特定的扩展。

您需要附加一个事件处理程序,没有办法只是“观察”事件。像 Microsoft Ajax 库的 jQuery 这样的框架将轻松地为您提供添加事件处理程序的方法。jQuery 很好,因为它的选择器框架。

然后我使用 Firebug(Firefox 扩展)并放置一个断点。我发现 Firebug 比 Visual Studio 2008 更容易设置和拆卸。

于 2008-09-18T13:07:01.470 回答
1

Borkdude 说:

您可能想尝试使用 Visual Studio 2008 及其调试 JavaScript 代码的功能。

我已经多次研究事件处理,在我看来,虽然经典的步进调试器对于跟踪长时间的代码运行很有用,但它们在跟踪事件方面并不好。想象一下监听鼠标移动事件并在每个事件上闯入另一个应用程序......所以在这种情况下,我强烈建议记录。

如果问题不是特定于 Internet Explorer 7 而是在 Firefox 中也出现,那么调试 JavaScript 代码的另一个好方法是 Firefox 和具有 JavaScript 调试器的Firebug插件。

还有适用于 Internet Explorer 的Firebug Lite。我没有机会使用它,但它存在。:-) 它的缺点是它不是一个成熟的调试器,但它有一个 window.console 对象,这正是您所需要的。

于 2008-09-18T12:50:04.257 回答
0

这是基本的,但您可以在触发某些内容时粘贴警报或 document.write 调用。

于 2008-09-18T10:12:36.553 回答
0

我不确定确切的代码(自从我编写复杂的 JavaScript 代码以来已经有一段时间了),但是您可以枚举表单上的所有控件并附加一个在触发事件时输出某些内容的事件。

您甚至可以使用匿名函数来包装必要的信息,以识别正在触发的事件。

于 2008-09-18T10:14:21.930 回答
0

显而易见的方法是为各种事件设置一些警报,例如:

element.onclick = function () { alert('点击事件'); }

否则,您可以将警报插入到 dom 某处的侵入性较小的选项。

但是,请认真考虑使用像jQuery这样的库来实现您的功能。许多跨浏览器问题都是已解决的问题,您无需再次解决它们。我不确定您正在尝试实现的功能,但很可能有很多您可以使用的 jQuery 滚动和选择插件。

于 2008-09-18T10:14:59.527 回答
0

我喜欢做的一件事是在 JavaScript 中创建一个专门用于事件的绑定函数(就像您可以在Prototype库中找到的那样),以便它将“事件”对象传递给绑定函数。现在,如果您要这样做,您可以简单地抛出一个跟踪调用,该调用将为使用它的每个处理程序调用。然后在不需要时将其删除。一个地方。简单的。

但是,无论您如何获取要调用的跟踪语句,您仍然希望看到它。最好的策略是有一个单独的窗格或窗口来处理跟踪调用。Dojo Toolkit有一个在 Internet Explorer 中运行的内置控制台,还有其他类似的东西。这样做的经典方法是创建一个新窗口并document.write对其进行操作。

  • 我建议为每个跟踪附加一个日期时间。过去对我帮助很大。
  • 调试和警报通常对您没有帮助,因为它会中断正常的事件流。
于 2008-09-18T10:20:48.500 回答
0

Matt Berseth 可能是您在使用 Trace Console AjaxControlToolkit Control 调试 ASP.NET AJAX 应用程序时正在寻找的东西。

它基于 Yahoo YUI记录器YUI 2: Logger

于 2008-09-18T10:34:52.473 回答
-1

我的建议是,将 FireFox 与 FireBug 一起使用,并使用内置的 Debug/Trace 对象。他们是一种魅力。

于 2008-09-18T13:10:06.860 回答