我可以从 iframe 触发父窗口范围内的事件并进行侦听,但我无法从 iframe 范围内的 iframe 触发事件并在父窗口中侦听它。例如,在父窗口中窗口,我有一个 iframe 和一些 jquery 代码来监听在它的主体中触发的事件
<iframe id="myframe" src="/vf-install.php" width="500" height="500"></iframe>
jQuery('#myframe').contents().find("body").on('foo',function(){
alert('foo');
});
在 iframe 中,我触发了一个事件:
<script type="text/javascript">jQuery("body").trigger("foo");</script>
我没有触发我的事件。作为旁注,我可以从 iframe 触发父窗口中的事件,如下所示:
parent.jQuery("body").trigger("foo");
但这对我来说是不可接受的。原因是通过 iframe 包含的 vf-install.php 是我的程序的安装程序。我正在使用 qUnit 编写回归测试,该测试将我的安装程序包含在 iframe 中,单击安装按钮,然后当安装程序完成(触发事件)时,测试将做出断言。因此,它唯一一次通过 iframe 包含在测试中。实际用户直接调用该页面,我不希望它在不存在的父窗口上触发事件。
另外作为旁注,我尝试在调用 load() 时将事件侦听器附加到 iframe 的主体,以防这是与“实时查询”相关的问题(在 ajax 更改页面后事件未绑定):
jQuery('#myframe').load(function(){
// attach the event listener like above
});