ただし、現在の(子)ウィンドウを閉じると、オブジェクトは実際には現在のウィンドウに存在し、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でも動作します)