【问题标题】:How to find the snippet of JavaScript that modifies an element?如何找到修改元素的 JavaScript 片段?
【发布时间】:2009-10-26 02:11:40
【问题描述】:

我正在尝试检查的页面在页面上有一个隐藏的 <input type="hidden" name="Foo" value="123 /> 元素,其中 Javascript/AJAX 修改了该值。我试图在 Javascript 中找到不时修改此值的代码。

是否有工具可以帮助我在 javascript 中找到使用/修改该元素的位置? Firebug 是否提供此功能,如果提供,如何提供?

注意:如果尝试在代码中查找“Foo”,但我没有找到任何匹配的标题。加载了 JSON 和 Mootools,+特定于应用程序的代码,这会产生数千行代码。该元素可能是间接访问的。

【问题讨论】:

    标签: javascript dom firebug element


    【解决方案1】:

    Firebug 1.5 将在 HTML 面板上显示“Break-on-Modify”。请参阅 http://getfirebug.com/doc/breakpoints/demo.html#html - Break on DOM (HTML) Mutation Events。

    【讨论】:

    • +1 获取信息。确实存在设置断点的修改时中断功能。但是,当我确实尝试设置这样的断点时,它不起作用,即它没有中断代码,使更改说按钮标题/状态发生更改。所以不知道除了设置断点还需要做什么。
    【解决方案2】:

    你怎么知道 javascript 正在修改这个值?因为它看起来你已经知道它何时被调用(因为你知道它会发生变化),所以我建议在 Firebug 中的第一个启动更改的事件中设置一个断点(可能是其他元素中的 onclick 属性)。

    很难告诉你一种“通用”的方式来知道它在 javascript 中的什么地方改变了 Foo 的值,因为有很多不同的方法、不同的库,每个都有它的语法。

    例如,如果您尝试搜索“Foo”但没有找到,则脚本可能正在遍历 DOM 并将输入的值更改为“某物的第一个孩子”。我会尝试搜索输入的父元素的名称或 ID,并从那里理解代码。

    我通常只是尝试从我使用 Firebug 调试技术的每个脚本中理解 javascript 逻辑 - 但只是在使用库的脚本上。

    【讨论】:

    • +1 用于为候选人进行更改的“grep”来源的通用方式。希望应该有比其他答案中描述的更好的方法来设置断点。
    【解决方案3】:

    如果 Firebug 不允许您在设置某些值时定义断点,您可以在页面中插入类似这样的内容(仅限 Firefox):

    $("textarea")[0].__defineSetter__("value", function(val) {
       alert("called");
    })
    

    并且可以在 Firebug 中的函数上设置断点,或者使用 console.log 或其他任何方式将堆栈转储到 Firebug 控制台。

    我记得在某处看到过有关 Firebug 计划的演示文稿,其中包括有关要支持的各种断点的部分,但我现在找不到指向它的链接。


    [编辑] 以上是通过分配给 value 属性来设置值的情况:.value = ...。如果您需要捕捉 attribute 更改的时刻 (.setAttribute("value", ...)),您可以使用 DOM 突变侦听器。

    【讨论】:

    • +1 获取信息。您能否分享有关如何 使用 DOM 突变侦听器的信息?一个或两个链接?谢谢。
    • @GuruM:使用带有事件名称 DOMAttrModified 的 addEventListener,参见 developer.mozilla.org/en-US/docs/DOM/Mutation_events 。请注意,突变侦听器正在逐步淘汰,取而代之的是一种不同的机制,突变观察者(在 MDN 页面上也提到过)
    猜你喜欢
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多