javascript - 单击 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);
解决方案
tl;dr:是的,当导航发生时,注入的 javascript 会丢失。
Javascript 通常与文档相关联,而不是容器(即:浏览器、iframe 等)。通常,当导航发生时,在该上下文中运行的任何 javascript 都会被卸载,以便为新文档及其新 javascript 做准备。
这在 iframe 的情况下不会改变。iframe 是查看上下文,iframe 的文档仍然是一个文档,并且仍然具有与正常加载时相同的语义。能够将代码注入该文档并不会改变任何事情。
推荐阅读
- sql - 如何在一列中的所有值之前添加一个字符串——使用 Redshift
- html - 我通过 id 更改了 css 标签 li 并且没有工作
- c# - 将方法拉入通用基类是一项重大更改
- javascript - React useState 导致渲染循环
- spring-data-jpa - Thymeleaf 不使用 th:each 显示数据
- java - 如何根据条件使实体中的字段不可编辑 - Java/Hibernate
- python - 如何在 AWS 网站上托管文件目录?
- tableau-api - 如何将 Tableau 中每个度量的数字转换为百分比?
- python - ModuleNotFoundError: No module named 'sqlalchemy' -- Conda 包管理器
- updates - 需要帮助将 Pinescript 版本 1 更新到版本 4