【问题标题】:Iframe event to parent给父级的 iframe 事件
【发布时间】:2015-04-24 13:37:40
【问题描述】:

所以,我想在 iframe 中触发一个事件,例如:

$('body').trigger('my_event');

我想在包含 iframe 的主页上绑定此事件:

$('iframe').find('body').bind('my_event', function()
{
    console.log('My event !');
}

但这不起作用。但是,我可以将事件从 iframe 触发到父正文。所以我有(在我的 iframe 中):

$(top).find('body').trigger('my_event');

在我的主页中:

$('body').bind('my_event', function()
{
    console.log('My event !');
}

这很好用。 为什么?

是的,我确实知道跨域策略。我的主页和 iframe 都来自同一个域。

谢谢!

【问题讨论】:

  • 原因:因为事件不会神奇地越出文档,它们在……中发生(或被触发)
  • 由于我的第二个示例确实有效,我猜事件可以“越界”出文档?
  • 不,因为您在父文档的范围内明确触发它。 (正如您所说,您不会触发它“到”父主体,而是on。)
  • mm.. 好的,这是有道理的。谢谢。 :)
  • 试试$('iframe').contents() ...

标签: javascript jquery html iframe


【解决方案1】:

这可能是因为在您引用 $('iframe').find('body') 时它尚未加载。

尝试使用委托绑定,类似这样:

$(document).on('my_event', 'iframe body', function(e){
     console.log('My event !');
});

查看更多信息:https://learn.jquery.com/events/event-delegation/

更新:

看起来父级不会从 iframe 捕获事件,除非它在其元素上显式触发。

例如在您的 iframe 中:

parent.$(parent.document).trigger("my_event");

在父级中:

$(document).on('my_event', function(e){
      console.log('My event !');
});

【讨论】:

  • 感谢您的想法,但不幸的是它似乎不起作用。 :(
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多