【问题标题】:Triggering a jQuery event from iframe从 iframe 触发 jQuery 事件
【发布时间】:2011-07-14 17:20:20
【问题描述】:

这是场景,我在 iframe 中发生了一些事件,到目前为止一切正常。我刚刚遇到了我想将事件从 iframe 分派到父级的问题。

我正在使用它从 iframe 触发事件:

$('body', window.parent.document).trigger('eventName');
//and I've also tried
$(window.parent.document).find('body').trigger('eventName');

然后在父页面中,我正在监听这样的事件:

$('body').bind('eventName', myFunction)

我知道脚本会触发,因为我在触发之前和之后都插入了 console.log。 iframe 在同一个域上,所以那里没有问题。

我可以像这样直接调用父页面上的函数:window.parent.functionName 但我想知道这是否可以通过使用基于事件的解决方案来实现。

已解决

@cwolves 的回答效果很好:

parent.$('body').trigger( 'eventName' );

【问题讨论】:

标签: jquery iframe


【解决方案1】:

如果您在父框架中加载了 jQuery,请尝试:

parent.$('body').trigger( 'eventName' );

如果没有,试试这个,我不确定它是否会起作用,但我只是查看了 jQuery 源代码并认为它​​可以:

var pBody = $( parent.document.body );
pBody.trigger( 'eventName', pBody.data() );

(绑定eventName时做同样的事情) 据我所知,问题在于 jQuery 正在使用来自本地页面的数据,这会导致问题,因为它看起来像是在尝试从其他框架加载数据。换句话说,就是一团糟,但是.bind.trigger等接受了data参数。

【讨论】:

  • 不走运。第一个是未定义的。触发器确实有第二个参数,但它是您要传递给绑定函数的数据。该事件永远不会到达绑定的事件回调,因此在这种情况下它不会做任何事情(我确实尝试过,但从未听到过该事件)
  • 对不起 - 首先不应该有“document.body”。已编辑。
  • 很好,parent.$('body').trigger('eventName') 效果很好。非常感谢!
【解决方案2】:

在 iframe js 代码中试试这个

var parentWin = $( window.parent.document.body );
jQuery.event.trigger('eventName', parentWin.data(), parentWin );

【讨论】:

  • 这不起作用。 @cwolves 他回答的第一部分有效。谢谢
【解决方案3】:

所以这将是你的 iFrame 中的代码:

$('#myElem').click(function() {

    window.parent.success_msg();

});

而且这段代码需要在父窗口中:

window.success_msg = function() {

    // Your code goes here

};

您还需要在本地或托管的服务器上运行它。

【讨论】:

  • 这与问题的最后一段有什么不同,I can call a function on the parent page directly like this: window.parent.functionName but I was wondering if this is possible with using using an event based solution.
猜你喜欢
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多