我想知道何时或是否需要在内容脚本中断开MutationObserver以避免内存泄漏。

因此,我的内容脚本会检查DOM的所有新添加内容并相应地更新HTML。为此,我使用MutationObserver在内容脚本中创建并开始。

我的问题是,MutationObserver是在加载新页面时自行销毁还是我必须听页面更改以断开连接并每次自行销毁。

以下是相关代码:

function startObserver(textSize: number, lineHeight: number, font: string = "Droid Arabic Naskh") {

    let config: MutationObserverInit = {
        attributes: false,
        childList: true,
        subtree: true,
        characterData: true,
        characterDataOldValue: false,
    };

    let callback: MutationCallback = (mutationsList: MutationRecord[]) => {
        mutationsList.forEach((record: MutationRecord) => {
            // If something has been added
            if (record.addedNodes.length > 0) {

                //  For each added node
                record.addedNodes.forEach((addedNode: Node) => {

                    // For each node with Arabic script in addedNode
                    getArabicTextNodesIn(addedNode).forEach((arabicNode: Node) => {

                        // Update arabicNode only if it hasn't been updated
                        if (arabicNode.parentElement && arabicNode.parentElement.getAttribute("class") != "ar") {
                            updateNode(arabicNode, textSize, lineHeight, font);
                        }
                    });
                });
            }
        });
    };

    if (!observer) {
        observer = new MutationObserver(callback);
        observer.observe(document.body, config);
    }
}

最佳答案

很久以前就找到了它,这要归功于@xOxxm和一些个人测试和玩耍,但是要回答我自己,以防将来有人需要


  MutationObserver在加载新页面时会自行销毁吗?还是我必须听页面更改以断开连接并每次自行销毁?


是的,MutationObserver在离开页面时会自行销毁(document已更改),因此上述代码实际上是安全的,并且没有任何可能的内存泄漏。

关于javascript - 何时断开Chrome/Web扩展程序中的MutationObserver的连接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57468727/

10-09 23:23