首页 > 解决方案 > 单击 iframe 的 href 时删除 iframe 的突变观察者?

问题描述

在 iframe 中附加一个突变观察者后,按下 iframe<a href=''>内的按钮会删除突变观察者吗?

我编写了代码以允许突变观察者检测身体元素​​的变化,但它没有检测到。我想知道我是否写错了代码,或者我上面的想法是否正确。

如果突变观察者被删除,我应该将突变观察者注册到 iframe 所属的父框架吗?

let config = { attributes: true, childList: true, subtree: true, characterData: false };
let htmlBody = document.querySelector('body');

let observer = new MutationObserver(function(mutations, observer) {
    mutations.forEach(function(mutation) {
         console.log("Mutation calling");
    });
});

observer.observe(htmlBody, config);

标签: javascriptgoogle-chrome-extension

解决方案


tl;dr:是的,当导航发生时,注入的 javascript 会丢失。

Javascript 通常与文档相关联,而不是容器(即:浏览器、iframe 等)。通常,当导航发生时,在该上下文中运行的任何 javascript 都会被卸载,以便为新文档及其新 javascript 做准备。

这在 iframe 的情况下不会改变。iframe 是查看上下文,iframe 的文档仍然是一个文档,并且仍然具有与正常加载时相同的语义。能够将代码注入该文档并不会改变任何事情。


推荐阅读