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

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

重新连接源的工作量太大,我希望有一个类似嗅探器的东西可以向我显示所有触发的事件。

有帮助吗?

解决方案

博克杜德说道:

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

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

如果问题不是 Internet Explorer 7 特有的,而是 Firefox 中也出现,那么调试 JavaScript 代码的另一种好方法是 Firefox,并且 萤火虫 具有 JavaScript 调试器的附加组件。

而且还有 萤火虫精简版 对于 Internet Explorer。我没有机会使用它,但它确实存在。:-) 它的缺点是它不是一个成熟的调试器,但它有一个 window.console 对象,这正是您所需要的。

其他提示

循环遍历页面上定义了 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();
        };
    }
}

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

如果问题不是 Internet Explorer 7 特有的,而是 Firefox 中也出现,那么调试 JavaScript 代码的另一种好方法是 Firefox,并且 萤火虫 具有 JavaScript 调试器的附加组件。然后你还可以把 console.log JavaScript 代码中的语句,然后您可以在 控制台窗口 在 Firebug 中,不要使用有时会扰乱事件链的警报。

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

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

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

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

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

element.onclick = function () { alert('Click event'); }

否则,您可以选择将警报插入 dom 中的某个位置,从而减少侵入性。

但是,认真考虑使用像这样的库 jQuery 来实现你的功能。许多跨浏览器问题已经解决,您不需要再次解决它们。我不确定您想要实现的功能到底是什么,但很可能有很多您可以使用的 jQuery 滚动和选择插件。

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

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

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

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

  • 我建议为每个跟踪附加一个日期时间。过去对我帮助很大。
  • 调试和警报通常不会帮助您,因为它会中断正常的事件流。

马特·伯塞斯(Matt Berseth)拥有的东西可能正是您正在寻找的东西 使用跟踪控制台 AjaxControlToolkit 控件调试 ASP.NET AJAX 应用程序.

它基于雅虎 尤伊 记录器, 唯2:记录器.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top