子窗口closures时如何运行父窗口的function?

我打电话给javascript window.open()函数来加载另一个URL在popup。 一旦用户完成,它将带他们到最后一页,其中有一个链接,说closures窗口,调用window.close()函数。 现在当这个页面closures时,我需要在打开窗口的原始页面上更新一些东西。 有没有办法做到这一点? 我必须调用我的原始页面中的函数。

你可以尝试一下:

产生的窗口:

window.onunload = function (e) { opener.somefunction(); //or opener.document.getElementById('someid').innerHTML = 'update content of parent window'; }; 

父窗口:

 window.open('Spawn.htm',''); window.somefunction = function(){ } 

你不应该这样做的父母,否则opener.somefunction()将无法正常工作,做window.some函数使公共function:

 function somefunction(){ } 

您可能想要使用“ onbeforeunload ”事件。 它将允许您在子窗口closures之前立即在子窗口中调用一个函数。

所以可能是这样的:

 window.onbeforeunload = function (e) { window.parent.functonToCallBeforeThisWindowCloses(); }; 

这是一个旧的post,但我想我会添加另一种方法来做到这一点:

 var win = window.open("http://www.google.com"); var winClosed = setInterval(function () { if (win.closed) { clearInterval(winClosed); foo(); //Call your function here } }, 250); 

您不必修改内容或使用子窗口中的任何事件处理程序。

答案就是要求你将代码添加到衍生窗口。 这是不必要的耦合。

 // In parent window var pop = open(url); pop.onunload = function() { // Run your code, the popup window is unloading // Beware though, this will also fire if the user navigates to a different // page within thepopup. If you need to support that, you will have to play around // with pop.closed and setTimeouts } 

我知道这个post是旧的,但我发现这真的很好:

 window.onunload = function() { window.opener.location.href = window.opener.location.href; }; 

window.onunload部分是我发现谷歌search这个页面的提示。 谢谢,@jerjer!

随着jerjer的答案(上),有时在你的父窗口和子窗口不是都是外部或内部的,你会看到未定义的开启者的问题,你不能访问父页面的属性,请参阅window.opener是未定义的Internet Explorer

检查以下链接 。 这也会有帮助

在父窗口中:

 function OpenChildAsPopup() { var childWindow = window.open("ChildWindow.aspx", "_blank", "width=200px,height=350px,left=200,top=100"); childWindow.focus(); } function ChangeBackgroudColor() { var para = document.getElementById('samplePara'); if (para !="undefied") { para.style.backgroundColor = '#6CDBF5'; } } 

父窗口HTML标记:

 <div> <p id="samplePara" style="width: 350px;"> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. </p><br /> <asp:Button ID="Button1" Text="Open Child Window" runat="server" OnClientClick="OpenChildAsPopup();"/> </div> 

在子窗口中:

 // This will be called when the child window is closed. window.onunload = function (e) { opener.ChangeBackgroudColor(); //or you can do //var para = opener.document.getElementById('samplePara'); //if (para != "undefied") { // para.style.backgroundColor = '#6CDBF5'; //} };