如何获得触发的 MutationObserver 的堆栈跟踪?

Posted

技术标签:

【中文标题】如何获得触发的 MutationObserver 的堆栈跟踪?【英文标题】:How do you get a stack trace for a triggered MutationObserver? 【发布时间】:2013-02-24 08:06:19 【问题描述】:

首先,这不是“如何创建变异观察者?”发帖,我已经看到了 API。

我想知道是否有人知道显示突变发生时间的“来源”的方法。这很可能是某种解决方法 - 我在 API 文档中看不到任何提及。

我试图找出一个元素将其display in style 设置为none 的位置。

我的代码如下所示:

var observer = new MutationObserver(function(mutations) 
    mutations.forEach(function (mutation) 
        if (mutation.attributeName === "style") 
            var extendedMutation = _.extend(, mutation, 
                newValue: $(mutation.target).attr("style")
            );

            console.log(extendedMutation);
        
      );
);

observer.observe(row.element[0],  attributes: true, attributeOldValue: true );

我有几个突变事件,它们看起来是这样的:


    addedNodes: NodeList[]

    attributeName: "style"

    attributeNamespace: null

    newValue: "display: none;"

    nextSibling: null

    oldValue: ""

    previousSibling: null

    removedNodes: NodeList[]

    target: li#d526d311-e6e0-4ef1-a3a1-f8686bbb468f.group

    type: "attributes"


我只是想知道它来自 JS 源代码的哪个位置!有什么想法吗?

请注意,我尝试了 ctrl+f,但无济于事。

调试器/异常输出(也尝试过用于 Chrome 的 WebkitMutationObserver,结果相同):

【问题讨论】:

【参考方案1】:

我知道这个线程已经很老了,但是现在有一个来自 Chrome 的工具来跟踪异步调用,我想提一下。

Chrome 调用堆栈异步选项,我认为它可以实现异步调用的回溯。此选项可在开发者工具 -> 调用堆栈选项卡中找到。通过打开 Async 选项并在 MutationObserver 回调函数上设置断点,我们将能够看到完整的调用堆栈。

希望对你有帮助。

【讨论】:

IMO,这比上面的答案更好。 哎呀! Chrome DevTools 现在似乎缺少这个“异步”复选框(v 60.0 ...)。也许它已经去别的地方了? FF有这样的吗?我讨厌 Chrome。

以上是关于如何获得触发的 MutationObserver 的堆栈跟踪?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery如何监听一个DIV宽高的变化?

Mutation Observer

如何在 MutationObserver 的回调中“暂停”观察

如何在多个节点上使用 MutationObserver?

MutationObserver监听DOM变化

JavaScript是如何工作的:使用MutationObserver跟踪DOM的变化