跨窗口的javascript事件

时间:2010-07-06 18:10:31

标签: jquery dhtml

我正在启动一个带有window.open(...)的弹出窗口,然后将elementId传递给新的弹出窗口。

然后在启动弹出窗口期间,我在开启窗口中找到与传递给弹出窗口的elementId匹配的元素。然后弹出窗口使用jQuery.bind(...)订阅该元素上的事件。然后从开启窗口内部我使用jQuery.trigger(...)触发这些事件,我也尝试了triggerHandlers。

问题是我的弹出窗口的eventHandler永远不会被调用。我可以在开启窗口内部订阅事件没问题。但是,当我从弹出窗口尝试时,它不起作用。

有没有人对如何解决这个问题有任何想法?这是某种安全描述吗?

非常感谢您的阅读!

2 个答案:

答案 0 :(得分:10)

答案 1 :(得分:3)

感谢Pointy的回答。我尝试了这个,并希望分享我的发现。您可以在弹出窗口中实际定义事件侦听器,而无需引用开启器:

页面中的

以弹出方式打开:

$(document).on("foo", function() { 
  alert("foo"); 
});
打开弹出窗口的页面中的

var popup = window.open("popup.html", "_blank", "width=500");
$("#trigger-button").on("click", function() {
  popup.$(popup.document).trigger("foo");
});

秘诀是:即使从弹出窗口对象调用jQuery,也不能直接使用选择器,因为jQuery会尝试在父窗口(opener)窗口中查找元素。