Javascript 在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中访问和创建对象非常简单

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雇主。