捕获围绕一个iframe的div点击

我如何捕捉围绕iframe的div上的点击或mousedown事件。 我已经尝试附加function点击事件上的div,但由于iframe从来没有泡沫的事件到周围的div这个function是永远不会被调用。 有没有一种方法,我可以捕获div上的事件,然后传播给iframe默认的行动

如果点击位于iframe区域,则iframe上下文将处理click事件,但不会冒泡到iframe父级。 因此,如果发生在iframe区域,div将永远不会注册点击事件。

此外,如果iframe包含与iframe父级不属于同一个域的页面,则禁止任何交互(重复相同的源策略 )。

当满足相同的来源策略时,您可以执行一些操作,您可以在iframe父上下文中调用方法:

top.parentFunction(); 

因此,在iframe中添加一个事件侦听器,该事件侦听器委托给iframe父级(可通过top引用访问)。

传播事件要复杂得多,所以我只想提到Diego Perini的NWEvents图书馆 。 我相信他的事件系统是更好的事情之一,他特别关注iframe的交互。

我当然不会开始编写你自己的代码来实现这个目标,如果你想正确地做到这一点,那么很容易就可以做一年的项目,即使这样也不如迭戈的工作。

没有“好”的方法去做,但是如果你真的需要检测一个Iframe的点击,你可以在最新的浏览器中进行。

 <iframe src="http://mtw-ed.com/" id="iframe" style=""></iframe> <script type="text/javascript"> var inIframe = false; function checkClick() { if (document.activeElement && document.activeElement === document.getElementById("iframe")) { if (inIframe == false) { alert("iframe click"); inIframe = true; } } else inIframe = false; } setInterval(checkClick, 200); </script> 

这个脚本会每隔200ms检查用户是否在Iframe中。 当然,他们可能没有点击Iframe来达到目标​​,但是如果没有BGerrissen的解决scheme,恐怕这是最好的。

它只会检测到第一个“点击”,除非你再次点击。 它只适用于真正的现代浏览器。

您可以使用像舷窗一样的库在父级和iframe之间传递消息,甚至跨域。 使用它不会传播事件(您将无法获得事件对象),但是您可以以简单消​​息的forms创build自己的事件,然后在父级中将其作为点击处理。

这是他们的例子

但是,我已经使用Brendon的答案,因为它更简单的作品,我目前的需要。