子窗口关闭时如何运行父窗口的功能?

时间:2009-11-22 05:04:18

标签: javascript window

我正在调用javascript window.open()函数在弹出窗口中加载另一个url。用户完成后,将它们带到最后一个页面,该页面的链接显示调用window.close()函数的关闭窗口。现在,当该页面关闭时,我需要更新打开窗口的原始页面中的内容。有没有办法做到这一点?我必须调用我原始页面中的一个函数。

7 个答案:

答案 0 :(得分:58)

你可以试试这个:

产生窗口:

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.somefunction使一些功能公开:

function somefunction(){

}

答案 1 :(得分:9)

您可能想要使用“onbeforeunload”事件。它允许您在子窗口关闭之前立即从子窗口调用父窗口中的函数。

所以可能是这样的:

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

答案 2 :(得分:8)

这是一篇旧帖子,但我想我会添加另一种方法来做到这一点:

var win = window.open("http://www.google.com");

var winClosed = setInterval(function () {

    if (win.closed) {
        clearInterval(winClosed);
        foo(); //Call your function here
    }

}, 250);

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

答案 3 :(得分:4)

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

// 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
}

答案 4 :(得分:0)

我知道这篇文章很老,但我发现这确实很有效:

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

window.onunload部分是我发现谷歌搜索此页面的提示。谢谢,@ jerjer!

答案 5 :(得分:0)

除了jerjer answer(顶部),有时在父窗口和子窗口中都不是外部窗口或内部窗口都会出现未定义的opener问题,并且您无法访问父页面属性,请参阅window.opener is undefined on Internet Explorer < / p>

答案 6 :(得分:-2)

检查link。这也很有帮助。

在父窗口中:

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