Javascript 在window.opener中创建在子窗口关闭时保持的对象
在window.opener中访问和创建对象非常简单Javascript 在window.opener中创建在子窗口关闭时保持的对象,javascript,dom,Javascript,Dom,在window.opener中访问和创建对象非常简单 window.opener.myObj = new Object(); window.opener.myObj.name = 'Tom'; alert(window.opener.myObj.name); // alerts('Tom') 但是,当当前(子)窗口关闭时,对象myObj将变得无效,因为该对象实际位于当前窗口中,并且window.opener仅保留对该对象的引用 如何从子窗口在window.opener DOM中创建一个对象,以
window.opener.myObj = new Object();
window.opener.myObj.name = 'Tom';
alert(window.opener.myObj.name); // alerts('Tom')
但是,当当前(子)窗口关闭时,对象myObj将变得无效,因为该对象实际位于当前窗口中,并且window.opener仅保留对该对象的引用
如何从子窗口在window.opener DOM中创建一个对象,以便在子(当前)窗口关闭时它仍然存在
但是,当当前(子)窗口关闭时,对象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);
}
});
子窗口脚本:
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中使用)我已经“证明”了这一点,并目睹了错误:被叫方(服务器)不可用并且消失了。@user1806949:那么,你知道你的例子和我的有什么不同吗?我看不出物体离开有任何问题。哼-我不确定我能回答。上面提供的代码不起作用。我犯了一个错误。错误:无效的过程调用或参数。顺便说一句-这是IE7 unfortunatelyOK-我将在FF中尝试,并将尝试找到一个非常严格的IE8雇主。