【问题标题】:Mutation Observer - addedNodes[0] eventually becomes undefinedMutation Observer - addedNodes[0] 最终变为未定义
【发布时间】:2018-09-29 05:59:22
【问题描述】:

我正在使用突变观察者从 twitch.tv 获取任何聊天消息。

var observer = new MutationObserver(function (mutations) {  
    mutations.forEach(function (mutation) {
        if(mutation.addedNodes[0].classList.contains('chat-line__message')){
            counter++;
            console.log(counter);
        }
    });  
}); 

var observerConfig = {        
    childList: true,
};

它工作正常,直到聊天达到大约 144 条消息的最大数量,然后我不断收到:

Uncaught TypeError: Cannot read property 'classList' of undefined

为什么会发生,我该如何克服?

【问题讨论】:

    标签: javascript google-chrome-extension mutation-observers


    【解决方案1】:

    并非每个突变都会添加节点。听起来有些突变只涉及删除的节点。为避免该错误,您可以像往常一样检查是否存在添加的节点:

    if(mutation.addedNodes.length && mutation.addedNodes[0].classList.contains('chat-line__message'))
    

    实际上,突变可能会添加多个节点。这是一种更稳健的方法:

    mutations.forEach((mutation) => {
      const addedChatLineMessages = Array.from(mutation.addedNodes)
        .filter(({classList}) => classList && classList.contains("chat-line__message"))
    
      if(addedChatLineMessages.length){
        counter += addedChatLineMessages.length;
        console.log(counter);
      }
    });
    

    【讨论】:

    • 是的,这对我有用。我知道它不仅会拾取添加的节点,而且我没有考虑确认它们有长度。非常感谢,你很棒。
    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 2012-10-27
    • 2019-04-02
    • 2012-05-11
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多