gpt4 book ai didi

javascript - 何时在 Chrome/Web 扩展中断开 MutationObserver 的连接?

转载 作者:行者123 更新时间:2023-11-28 03:38:49 27 4
gpt4 key购买 nike

我想知道何时或是否需要断开内容脚本中的 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以及一些个人测试和玩耍,但回答自己以防其他人将来需要这个

Does the MutationObserver destroy itself when a new page is loaded or must I listen to page changes to disconnect it and destroy it myself each time?

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com