但是,当当前(子)窗口关闭时,对象 myObj 变为无效,因为该对象实际上驻留在当前窗口中,并且 window.opener 仅保留对它的引用。
你证明过吗?我不得不承认没有尝试过。我在 Chrome 或 Firefox 上都看不到这个结果。即使在子窗口关闭时,该对象仍然存在。更新:奇怪的是,在 IE9 上,对象仍然存在,但属性不存在。
但假设这是真的,你可以试试
window.opener.myObj = new window.opener.Object();
......但我不会真的抱任何成功的希望。更新:这不仅对 IE9 没有帮助,而且实际上使情况变得更糟。
相反,我认为我必须提倡回调父窗口以要求它创建对象。
父窗口脚本:
function createFoo(spec) {
window.foo = jQuery.extend({}, spec);
display("Created <code>foo</code> as requested by child window");
}
jQuery(function($) {
var childid = "childwin" + new Date().getTime();
$("#openPopup").click(function() {
var wnd = window.open("http://jsbin.com/asocuy/1", childid);
});
$("#displayFoo").click(function() {
if (window.foo) {
display("<code>foo</code> exists");
display("<code>foo.name</code> = " + window.foo.name);
}
});
});
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
子窗口脚本:
jQuery(function($) {
if (window.opener) {
if (!window.opener.createFoo) {
display("<code>window.opener.createFoo</code> not found");
}
else {
window.opener.createFoo({
name: "Fred"
});
display("Asked parent window to create <code>foo</code> with name = 'Fred'");
}
}
else {
display("<code>window.opener</code> not found");
}
$("#btnClose").click(function() {
window.close();
});
function display(msg) {
$("<p>").html(String(msg)).appendTo(document.body);
}
});
实例| 来源(甚至可以在 IE 中使用)