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

时间:2009-10-08 15:50:47

标签: 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中检测所有外部onclick事件?这会将iframe X显示/隐藏逻辑保留在iframe D中,这使得代码更容易移动。

如果我接受了onclick监控 - 我也想知道它是否会处理所有点击 - 例如,如果iframe A在特定元素上设置了一些onclick事件 - 我也肯定也抓住那些点击?我提到这一点是因为我目前的解决方法似乎有缺陷(iframes A,B,C报告他们的身体在iframe D上点击) - 某些点击不会触发身体onclick。

先谢谢你们。但请记住,在项目的这一点上删除iframe是不现实的。

3 个答案:

答案 0 :(得分:1)

在外部文档上放置一个YUI面板对象。

然后代替显示iframe X,显示YUI面板,使用模态模式,并在面板内容上放置< iframe ... src = x>

当你调用parent.panel.show()时,它会显示在所有框架上,并且很容易通过,允许面板外的任何点击关闭它。

答案 1 :(得分:1)

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

你最好的选择可能是你正在做的外框安装体处理程序,也可能安装onunload处理程序,所以它可以根据需要重新安装体处理程序。

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

答案 2 :(得分:0)

考虑到iframe限制,你不能以可靠的方式做到这一点。 可能有许多变通方法,但不确定如何适合您的需求。 也许,您可以通过ajax ping后端,它会触发更改? 或者,使用两个版本,一个是打开的孩子,一个是关闭的,然后你可以操纵父隐藏/显示。 或者,将iframe X替换为其他非iframe。 等等 它们可能不是满足您特定需求的可行解决方案。但只是想法。