子窗口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'; //} };