Подтвердить что ты не робот

Как запустить функцию родительского окна при закрытии дочернего окна?

Я вызываю функцию javascript window.open() для загрузки другого url во всплывающем окне. Как только пользователи будут завершены, они перейдут на последнюю страницу, на которой есть ссылка, в которой указано закрывающее окно, которое вызывает функцию window.close(). Теперь, когда эта страница закрывается, мне нужно обновить что-то на исходной странице, которая открыла окно. Есть какой-либо способ сделать это? Мне нужно вызвать функцию, которая находится на моей исходной странице.

4b9b3361

Ответ 1

Вы можете как-то попробовать это:

Порожденное окно:

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

Родительское окно:

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

}

Вы не должны делать этого на родительском, иначе openener.somefunction() не будет работать, выполнение функции window.someфункции делает какую-то функцию общедоступной:

function somefunction(){

}

Ответ 2

Вероятно, вы захотите использовать событие onbeforeunload. Это позволит вам вызвать функцию в родительском окне из дочернего элемента непосредственно перед закрытием дочернего окна.

Возможно, что-то вроде этого:

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

Ответ 3

Это старый пост, но я подумал, что добавлю еще один способ:

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

var winClosed = setInterval(function () {

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

}, 250);

Вам не нужно изменять содержимое или использовать какие-либо обработчики событий из дочернего окна.

Ответ 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
}

Ответ 5

Я знаю, что этот пост старый, но я обнаружил, что это действительно хорошо работает:

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

Часть window.onunload была подсказкой, которую я нашел на этой странице. Спасибо, @jerjer!

Ответ 6

Наряду с ответом jerjer (сверху) иногда в вашем родительском окне и дочернем окне не являются внешними или внутренними, вы увидите проблему с открывателем undefined, и вы не можете получить доступ к свойствам родительской страницы, см. window.opener undefined в Internet Explorer

Ответ 7

Отметьте . Это тоже было бы полезно.

В родительском окне:

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