捕获围绕一个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的答案,因为它更简单的作品,我目前的需要。