1

window.openerでのオブジェクトへのアクセスと作成は簡単です。

window.opener.myObj = new Object();
window.opener.myObj.name = 'Tom';
alert(window.opener.myObj.name); // alerts('Tom')

ただし、現在の(子)ウィンドウを閉じると、オブジェクトは実際には現在のウィンドウに存在し、window.openerはそのウィンドウへの参照のみを保持するため、オブジェクトmyObjは無効になります。

子ウィンドウから、window.opener DOMにオブジェクトを作成して、子(現在の)ウィンドウが閉じてもオブジェクトが保持されるようにするにはどうすればよいですか?

4

1 に答える 1

0

ただし、現在の(子)ウィンドウを閉じると、オブジェクトは実際には現在のウィンドウに存在し、window.openerはそのウィンドウへの参照のみを保持するため、オブジェクトmyObjは無効になります。

あなたはそれを証明しましたか?私はそれを試していなかったことを認めなければなりません。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でも動作します)

于 2012-11-07T17:58:29.477 に答える