Обновить родительское окно при закрытом всплывающем окне
Есть ли способ обновить родительское окно, когда всплывающее окно закрывается без добавления какого-либо кода javascript во всплывающее окно?
У меня есть страница parent.php, на которой пользователи могут нажать "открыть всплывающее окно", чтобы открыть всплывающее окно. Это всплывающее окно показывает некоторый флэш-контент, и для меня невозможно добавить что-то вроде
window.onunload = function(){
window.opener.location.reload();
};
на разметку страницы всплывающего окна.
Есть ли какой-либо другой способ достижения этого?
Благодаря
Ответы
Ответ 1
Чтобы сделать эту работу во всех основных браузерах, вам нужно обработать обработчик событий unload
во всплывающем окне и выполнить перезагрузку в главном окне. В главном окне добавьте
function popUpClosed() {
window.location.reload();
}
В всплывающем окне:
window.onunload = function() {
if (window.opener && !window.opener.closed) {
window.opener.popUpClosed();
}
};
Таким образом, ответ на ваш вопрос обычно отсутствует, если вам нужен ваш код для работы во всех браузерах, в частности IE.
Ответ 2
Я уверен, что вы можете просто добавить это в parent.php:
var myPop = "pop up window selector"
myPop.onunload = function(){
location.reload();
};
Ответ 3
Проблема с методом Tim Down заключается в том, что он не отвечает на исходный вопрос. Требование состоит в том, чтобы вы не могли добавлять код во всплывающее окно.
Одно из решений, которое я нашел, хотя и не особенно элегантный, эффективно для всех браузеров, на которых я тестировал.
Вы будете просто проверять только что созданный объект окна, проверяя, все ли он открыт.
В родительском окне:
var register;
var poll;
function isOpen(){
if(register.closed){alert("Closed!"); clearInterval(poll);}
}
function create(){
register = window.open("http://www.google.com","register","width=425,height=550");
poll=setInterval("isOpen()",100); //Poll every 100 ms.
}
Ответ 4
имела аналогичную проблему, чтобы обнаружить закрытие всплывающего окна в родительском окне. Я думаю, причина в том, что
не устанавливая свойство document.domain.
любым способом добавить в Tim Down ответ на свойство document.domain как для окна, так и для всплывающего окна следующим образом:
<script type="text/javascript">
document.domain='<?=$_SERVER['SERVER_NAME']?>';
</script>
и вместо
window.onunload = function() {
if (window.opener && !window.opener.closed) {
window.opener.popUpClosed();
}
};
Я использовал во всплывающем окне:
<body onunload="window.opener.popUpClosed();">