【问题标题】:javascript: How to debug keyboard eventsjavascript:如何调试键盘事件
【发布时间】:2011-10-28 00:20:24
【问题描述】:

想象一个使用自定义键盘事件处理程序的 Web 应用程序,该处理程序可能会进行事件冒泡或事件捕获。
有没有办法(例如 Firefox/Firebug 插件)调试每个按键/键盘事件,例如:

  • 显示事件类型和所有属性
  • 跟踪调用了哪个javascript方法
  • 在事件冒泡的情况下,已经调用了进一步的方法

为了澄清我的问题:我不知道存在哪些方法处理程序以及它们在哪里定义 - 这就是我想要找出的。

【问题讨论】:

    标签: javascript debugging firefox browser


    【解决方案1】:

    在 IE 中,您可以使用 debugger; 关键字。不确定 x 浏览器是否友好:

    function sayHello() {
         debugger; // will break here and launch script debugging in IE
         alert('hello world');
    }
    

    根据您的挑战:

    function someKeyPress(e) {
         debugger;
         // inspect e.keyCode ... etc
    }
    

    我发现这是最有效的调试技术,但我又在 IE 中花费了大量时间。许多人对 Firebug 很满意,但我发现它很麻烦,而且远不如 IE 的调试器直观。 IE 的调试器提供了更简单的监视和表达式评估,还提供了基于交互式反射的工具提示(如 VS 调试器)。

    此外,根据您的问题“跟踪调用了什么方法” - 调用堆栈响应速度非常快,易于跟进/跟进。

    更新:

    这是一个放置在每个页面底部的脚本,用于在 IE 中捕获和调试事件:

    <script type="text/javascript">
        function wrapIfHandled(el, evt) {
            if (el && evt && el['on' + evt]) {
                el['_on' + evt] = el['on' + evt];
                el['on' + evt] = function (e) {
                    foo(e, el['_on' + evt]);
                };
            }
        }
    
        function wrapAll() {
            var allEl = document.getElementsByTagName("*");
            for (var i = 0; i < allEl.length; i++) {
                wrapIfHandled(allEl[i], 'click');
                // wrapIfHandled(allEl[i], other event names <keyup, keydown, etc>
            }
        }
    
        function foo(e, d) {
            debugger;
            d(e);
        }
    
        wrapAll();
    </script>
    

    【讨论】:

    • 为此我必须知道哪些方法被用作事件处理程序 - 但这是我想要找出的。
    • 你能提供更多关于你的问题的细节吗?您无法访问 javascript 代码、html/java/php/aspx 页面吗?或两者?您是否可以访问任何源代码?
    • 是的,我可以访问源代码。想象一个旧的 Web 应用程序,它单独定义每个页面的事件处理程序,而不是在一般地方。我的问题是在某些页面的某些浏览器中,某些击键无法正常工作(但没有 javascript 错误)。我需要一个工具来跟踪所有键盘事件,以便能够快速查看事件的处理位置。
    • 尽我所能帮助您 - 不确定您的网站如何运作以及您使用什么来进行事件管理,但如果没有第三方观察者组件,代码应该可以工作。跨度>
    【解决方案2】:

    您可以尝试使用 Firebug + Eventbug 扩展来可视化通风口。

    有关不同浏览器中键盘事件的一般概述,请尝试以下操作:http://unixpapa.com/js/key.html

    【讨论】:

      【解决方案3】:

      我不知道为此目的的任何扩展。但是,您可以为关键事件编写处理程序,然后将适当的输出打印到 javascript 控制台。您也可以转储跟踪。 Firebug 具有内置跟踪功能:console.trace()。您也可以使用js trace 关键字google 来查找一些跟踪工具。

      This page 是处理键盘事件的好例子。

      【讨论】:

      • 为此我必须知道关键事件处理程序的定义位置。但这正是我提出问题的原因,我不知道调用了哪些事件处理程序方法。想象一个非常庞大且陈旧的软件系统 - 很难找到所有这些系统。
      猜你喜欢
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2019-05-19
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多