Проверьте, закрыто ли всплывающее окно

Я открываю всплывающее окно с

var popup = window.open('...', '...');

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

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

Я пытаюсь сделать

var popup = window.open('...','...');
if (popup) {
  popup.onClose = function () { popup.opener.location.reload(); }
}

Я думаю, я делаю это неправильно, потому что это не работает.

Для тестирования проблемы я даже пробовал это, но оповещения не появилось.

if (popup) {
  popup.onclose = function() { 
    alert("1.InsideHandler");
    if (opener && !opener.closed) { 
      alert("2.Executed.");
      opener.location.reload(true); 
    } else { 
      alert("3.NotExecuted.");
    }
  }
}

Ответ 1

Вот что я предлагаю.

во всплывающем окне

<script type="text/javascript">

function reloadOpener() {
  if (top.opener && !top.opener.closed) {
    try {
      opener.location.reload(1); 
    }
    catch(e) {  }
    window.close();
  }
}
window.ununload=function() {
  reloadOpener();
}
</script>
<form action="..." target="hiddenFrame">
</form>
<iframe style="width:10px; height:10px; display:none" name="hiddenFrame" src="about:blank"></iframe>

то в серверном процессе верните

<script>
top.close();
</script>

Старые предложения

В всплывающем окне нет переменной с именем popup. попробуйте

var popup = window.open('...','...');
if (popup) {
  popup.onclose = function () { opener.location.reload(); }
}

или с тестом:

popup.onclose = function () { if (opener && !opener.closed) opener.location.reload(); }

PS: onclose не поддерживается всеми браузерами

PPS: location.reload принимает логическое значение, добавляет true, если вы хотите не загружать из кеша  как в opener.location.reload(1);

Ответ 2

Попробуйте следующее:

window.opener.location.reload(true);

или

В открывшемся всплывающем окне

window.opener.location.href = window.opener.location.href;
window.close();

Ответ 3

Вместо этого вам следует использовать модальное диалоговое окно

var popup = window.showModalDialog("page.html", "", params);

Это остановит вас на этой строке, пока диалог не будет закрыт.

Где-то в вашем файле page.html вы затем закодировали некоторый javascript для установки window.returnValue, который будет тем, что будет размещать всплывающую переменную.

Ответ 4

Хорошо, так что вы делаете следующим образом.

создайте метод "setWindowObjectInParent", затем вызовите его во всплывающем окне. var popupwindow;

function setWindowObjectInParent(obj)
{
popupwindow = obj;
}

Теперь у вас есть объект, на который вы можете называть фокус.

Итак, во всплывающем окне добавьте

$(window).unload(function(){
window.opener.setWindowObjectInParent();
});
window.opener.setWindowObjectInParent(window);

Это приведет к отключению объекта obj при закрытии всплывающего окна и установке объекта при его открытии.

Таким образом, вы можете проверить, определено ли ваше всплывающее окно, а затем вызвать фокус.