javascript - 我将如何检测特定 iframe 外部的 onclick 事件?

标签 javascript html css iframe events

我的页面有一堆不同的 iframe(A、B、C、D)- 所有这些都始终完全可见。它们一起构成了我的应用程序 UI 的各个部分。其中一个 iframe,iframe D - 包含另一个较小的 iframe (iframe X),有时会因用户操作而变得可见。每当用户在其外部单击时,它应该会自动消失。通过在正文上放置一个 onclick,我可以从 iframe D 中轻松处理这个问题。如果我真的在 iframe D 的主体中检测到点击 - 这意味着他们没有在 iframe X 中点击,所以我可以通过 CSS 隐藏 iframe X。没问题。

问题是其他 iframe - A、B 和 C。如果用户在其中单击,我也想隐藏 iframe X。目前,我有它的工作 - 但不是很好。对于这些 iframe(A、B、C)中的每一个,我都有将正文点击传递给 iframe D 的代码。我不喜欢这种方法,因为 iframe A、B、C 都了解 iframe X——确实应该有不需要这个,它只是添加到我必须更改的文件以支持 iframe X 提供的功能。有什么方法可以处理从 iframe D 中检测外部点击事件吗?这会将 iframe X 显示/隐藏逻辑留在 iframe D 中,这使得代码更容易移动。

如果我开始进行 onclick 监控 - 我还想知道它是否会处理所有 点击 - 例如,如果 iframe A 在特定元素上设置了一些 onclick 事件 - 我是否也确定捕获那些点击?我提到这一点是因为我目前的解决方法似乎有缺陷(iframe A、B、C 将它们的 body onclicks 报告给 iframe D)——某些点击不会触发 body onclick。

提前谢谢大家。不过请记住,在元素的这个阶段删除 iframe 是不现实的。

最佳答案

事件不会冒泡超过 iframe 边界,因为那样会带来安全风险。 想象一个将银行网站嵌入到 iframe 中的网络钓鱼站点,并安装了一个 onkeypress 处理程序来记录用户在嵌入框架中键入的任何密码。

您最好的选择是让外部框架安装正文处理程序,也许还安装 onunload 处理程序,以便它可以根据需要重新安装正文处理程序。

是的,取消点击事件冒泡的事件处理程序会将其从 body 事件处理程序中隐藏。

关于javascript - 我将如何检测特定 iframe 外部的 onclick 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1538679/

相关文章:

javascript - 单击其他按钮时如何重置下拉菜单?

javascript - 添加此 Twitter 关注按钮自定义

html - 如何用CSS包裹div?

javascript - 在数组数组中查找缺失的数组

javascript - 在 iPhone Safari 中使用 ScriptProcessorNode

javascript - 表排序器和寻呼机 : how to install?

javascript - 使 YouTube api 在第一个视频结束时自动开始另一个视频

javascript - Angular : Using $location. path() 而不是 href

html - 是否可以相对于其父元素的边框定位元素?

javascript - 当其中一名类(class)成员悬停时突出显示所有类(class)