Я вызываю функцию javascript window.open() для загрузки другого url во всплывающем окне. Как только пользователи будут завершены, они перейдут на последнюю страницу, на которой есть ссылка, в которой указано закрывающее окно, которое вызывает функцию window.close(). Теперь, когда эта страница закрывается, мне нужно обновить что-то на исходной странице, которая открыла окно. Есть какой-либо способ сделать это? Мне нужно вызвать функцию, которая находится на моей исходной странице.
Как запустить функцию родительского окна при закрытии дочернего окна?
Ответ 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';
//}
};