javascript将事件从一个窗口传递到另一个窗口

时间:2011-09-08 01:32:00

标签: javascript

有没有办法打开新窗口,

var newWindow = window.open(...);

然后将事件从newWindow传递到其开启窗口?

我想要做的是打开一个窗口,询问一些信息,然后一旦输入,关闭新窗口并在原始窗口中触发一个动作。

感谢。

编辑:谢谢大家。这几乎是我认为它的工作原理,但我必须做一些愚蠢的事情。这里有一些测试代码,我一直在撞墙:

在parent.html中

window.open("child.html");

$(window).bind("something", function(e) {
    console.log('something happened');
});

和child.html

$("#somebutton").click(function() {
    $(window.opener).trigger("something");
    window.close();
});

孩子打开正常,我点击按钮,孩子关闭,但父母身上永远不会发生“某事”!

我也喜欢以相反的方式工作。有什么方法可以做出像这样的工作吗?

var child = window.open("child.html");

$(child).bind("something", function() { ... });

感谢。

4 个答案:

答案 0 :(得分:5)

是的,你可以这样做。在新窗口中,您可以使用window.opener访问父窗口。这使您可以访问父窗口的所有属性和功能,以便您可以执行以下操作:window.opener.someFunctionOfMainWindow('some data from new window');

在您的情况下,您可以在新窗口中执行此类操作。

function dataIsEntered() {
    window.opener.triggerAction(data);
    window.close();
}

答案 1 :(得分:5)

我毫不犹豫地不必要地插入jQuery,但对于像这样的事情来说非常好:

$('#somebutton').click(function() { window.opener.$('body').trigger('someevent', somedata); });

只需在子窗口的初始化脚本中运行该行。注意:even必须明显绑定到父级中的body元素。

请注意,您在此处受到单一来源政策的限制。除非浏览器明确允许,否则仅当两个窗口都从同一主机打开时才会起作用。

答案 2 :(得分:1)

确实有可能,你想看看window.addEventListener。这在现代浏览器以及IE 9中都可用。

访问this page了解更多信息和示例。

答案 3 :(得分:0)

window.opener.blah = "meh"

将开启窗口中的js var(blah)设置为“meh”