【问题标题】:How do I find what Javascript is running on certain events?如何找到在某些事件上运行的 Javascript?
【发布时间】:2013-08-07 20:59:34
【问题描述】:

我将为此示例选择 Chrome,但我愿意接受来自任何浏览器的解决方案。

用例: 我的网站上有一个更新按钮,用于更新购物车中的商品数量。我想允许用户输入 0 并单击更新以删除该项目。麻烦的是,一些js函数中有一些监听器拒绝输入0并点击更新(点击更新后旧数量仍然存在)。

我的问题是,我可以使用什么开发工具来查找该事件期间正在运行的 js 函数?我不认为 Chrome 的检查器会这样做,而且我对 Firebug 不是很熟悉,但我也找不到那里的功能。

我觉得我应该能够像检查 css 样式一样检查 js 触发。有人知道我可能使用的工具吗?

【问题讨论】:

    标签: javascript google-chrome firefox firebug web-inspector


    【解决方案1】:

    Mozilla Firefox下载Firebug,打开它,点击Net并刷新您的网站。然后,您可以看到页面上加载了哪些文件。

    如果您想检查错误和解释中的问题,请单击console 并再次刷新页面。您将看到错误以及出错的位置。

    注意:在您的console 中,您可以说holdstop,以便js 文件停止加载。您可以通过在 Firebug 中单击 script 来编辑脚本。调试很简单,正如他们官方页面https://getfirebug.com/javascript上所说的那样

    【讨论】:

    • 如果没有错误怎么办?它运行,但我想编辑它。那我怎么找到呢?
    • 比什么都看不到。如果没有错误,则代码正在运行。也许这不是你想要的工作方式,但没有错误,所以代码也没有错。当然有可能js文件没有加载,所以我说先检查net
    • 当然,代码可能有问题:它给出了不想要的结果。你不使用调试器来检查为什么会发生某些不需要的输出,即使没有错误?
    • 谢谢;如何找到它所在的文件?
    【解决方案2】:

    转到您的代码。如果您使用的是 jQuery,那么将使用该特定更新按钮的类或 id 调用一个函数。或者,如果您使用的是 Javascript,则会在

    内部调用一个函数
    <input type="button" name="update" onclick="update()">
    

    这是查找被调用函数的两种方法;没有我知道的软件

    【讨论】:

    • 看起来有点悲伤,不是吗?为什么我找不到在特定实例中运行的脚本?似乎有必要。
    • 是的,这很可悲,但是您无法像跟踪 php 函数调用那样在控制台中跟踪 js 函数
    • 有技术原因吗?
    【解决方案3】:

    在我的工作中,我不得不调试一些特别讨厌的、看不见的 Javascript 问题。了解 Chrome 等开发人员工具的全部深度绝对是有帮助的。无可否认,找到可能导致问题的地方需要一些创造力,但有一些提示:

    跟踪事件监听器

    在 Chrome 的 Elements 视图下,尝试检查元素(右键单击,检查);然后,在开发人员视图的右侧,向下滚动到 Event Listeners。在这里,您可以查看哪些代码文件与事件挂钩。通常,这只会将您从您正在寻找的真正狡猾的代码中指向一个中间框架,但有时它会为您指明正确的方向。

    捕获 DOM 修改

    我看到的许多不想要的效果是因为某些东西改变了我不想要的页面上的某些值或属性。任何时候发生这种情况,您都可以右键单击元素(在元素视图下)并说“Break on...”以及您正在寻找的特定场景。当 Chrome 然后遇到断点时,您可以在 Stack Trace 中向下查看,直到找到可识别但不应调用的内容。

    达到十票后编辑!

    捕获一个JS对象修改

    如果您感兴趣的更改是代码内部的,而不是 UI 中的,事情就会变得更加棘手。这个场景的意思是你知道代码中的某个地方,正在发生一些令人难以置信的令人讨厌的事情,如下所示。

    company.data.myObject.parameter = undefined;
    

    在这种情况下,您知道myObject 仍然是同一个对象,但它正在被修改,可能是无意的。为此,我经常插入以下代码,有时只是在上述修改发生之前的某个时间通过开发者控制台。

    Object.defineProperty(company.data.myObject, 'parameter', {
      set: (val) => {
        debugger;
      }
    });
    

    这包括一个箭头功能 - 您仅将其用于调试并且 Chrome 支持它,因此不妨节省击键。这将在某行代码尝试修改myObject 的“parameter”属性时立即冻结您的调试器。如果您可以从先前的断点运行这行代码,那么您不一定必须具有对变量的全局引用,该断点将在局部变量中具有给定对象。


    否则,如果我开始的只是 HTML 代码,并且我想将它与 Javascript 代码联系起来,我通常会寻找识别特征,如“id”元素,并搜索我的所有 JS 文件它的开发目录。通常,我可以很快达到它。

    【讨论】:

    • 这太好了,谢谢!我希望有人会回答谁有这样的丰富经验。我想我可能已经从你的第一个建议中找到了位置。我会继续寻找,但我认为你提到的 3 件事是我正在寻找的。我从未见过“事件监听器”部分。
    【解决方案4】:
    1. 在启用了 Firebug 的 Firefox 中打开您的页面。
    2. 转到 firebug 中的控制台选项卡并单击分析
    3. 在文本框中输入 0 并单击按钮。
    4. 停止分析。
    5. 您将能够看到由于您的操作而执行的所有 javascript 函数。您可以一一查看,找出是哪种方法造成的。

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 1970-01-01
      • 2018-01-27
      • 2012-01-08
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多