2009-10-08 52 views
1

我有一个页面,有一堆不同的内联框架(A,B,C,D) - 所有这些内容在任何时候都完全可见。它们一起组成了我应用程序UI的各个部分。其中一个iframe(iframe D)包含另一个较小的iframe(iframe X),有时通过用户操作可以看到它们。只要用户点击它,它就会自动消失。我可以轻松地在iframe D中通过将onclick放在body上来处理这个问题。如果我真的在iframe D的body中检测到一个点击 - 这意味着他们没有点击iframe X,所以我可以通过CSS隐藏iframe X.没问题。如何检测特定iframe外部的onclick事件?

问题是其他iframe - A,B和C.如果用户在这些内点击,我想隐藏iframe X也。目前,我有它的工作 - 但不好。对于这些iframe(A,B,C)中的每一个,我都有将身体点击传递给iframe D的代码。我不喜欢这种方法,因为iframe A,B,C都知道iframe X - 真的应该没有必要,它只是添加到文件,我必须改变,以支持由iframe X提供的功能。有没有什么办法可以处理检测外部onclick事件的所有内部iframe D?这会在iframe D中留下iframe X显示/隐藏逻辑,这使代码更容易移动。

如果我得到的onclick监控去 - 我也想知道是否会处理所有点击 - 例如,如果iframe中对特定元素设置一些的onclick事件 - 我是肯定也搭上这些点击?我提到这一点是因为我目前的解决方法似乎有缺陷(iframe A,B,C报告他们的body onclicks到iframe D) - 某些点击不会触发body onclick。

在此先感谢你们。但请记住,在项目的这个阶段删除iframe是不现实的。

回答

1

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

最好的办法就是可能会有外框安装正文处理程序,也许还会安装onunload处理程序,以便它可以根据需要重新安装正文处理程序。

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

1

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

然后代替示出的iframe X,显示了锐面板,具有模态模式,并且在面板内容放< IFRAME ... SRC = X>

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

0

考虑到iframe的限制,您无法以可靠的方式做到这一点。 可以有很多解决方法,但不知道如何适合您的需求。也许,你可以通过ajax ping后端,它会触发一个改变? 或者,使用两个版本,一个开放的孩子和一个封闭的孩子,然后你可以操纵父母的隐藏/表演。 或者,用其他不是iframe的iframe替换X. 等 他们可能不是你的特殊需求的可行解决方案。但只是想法。

相关问题