你能用 MutationObserver 追踪导致突变记录的原因吗?

Jos*_*han 8 javascript jquery google-chrome-extension mutation-observers reactjs

我正在开发一个 Google Chrome 扩展程序,并且有类似下面的代码。虽然下面的代码没有任何问题,但有一个小问题我无法解决。

我使用此代码来检测类是否因reports-content失去输入控件的焦点而发生更改,或者计时器是否是导致更改的操作。

问题是,如果更改是由于失去对输入控件而不是计时器的关注而导致的,我只想做一些事情。

我想这样做,这样我就可以循环不同的输入,并且只有在“报告内容”更新为新数据后才尝试新的输入。

“计时器”不在我的控制范围内,因为它位于第三方网站 (tradingview.com) 上,该网站恰好使用React 框架,以防万一这一点很重要。每次价格变化时,它都会检测到我正在检查的对象的突变,这不是一个错误,这样做很好,但我需要能够辨别由此引起的突变(计时器/event/change)并且来自输入控件失去焦点。

在此输入图像描述

下面是我当前看到的两个突变记录的示例,一个由事件引起,另一个由计时器或(价格变化注意到事件)引起。

在此输入图像描述

下面是报告内容的示例。

在此输入图像描述

//When the DOM is ready set the mutation listner.
$(document).ready(function(){
    console.log("JQuery Ready");

    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(record => {
            var recordTarget = record.target;
            
            if(record.addedNodes.length>0){
                if(recordTarget.classList.contains("reports-content")){
                    console.log(recordTarget);
                    console.log(record);
                };
            }
                    
        });
    });

    //Use mutation observer on 'body' to wait for the existence of the .reports-content class node
    var target = $('body')[0];
    var config = {
        childList:true,
        subtree: true
    };
    observer.observe(target, config);
});
Run Code Online (Sandbox Code Playgroud)