Проверьте, закрыто ли всплывающее окно - PullRequest
10 голосов
/ 07 июня 2011

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

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.");
    }
  }
}

Ответы [ 4 ]

6 голосов
/ 07 июня 2011

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

во всплывающем окне вы должны иметь:

<script type="text/javascript">

function reloadOpener() {
  if (top.opener && !top.opener.closed) {
    try {
      opener.location.reload(1); 
    }
    catch(e) {
    }
    window.close();
  }
}
window.onunload=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);

1 голос
/ 07 июня 2011

Попробуйте это:

window.opener.location.reload(true);

или

Во всплывающее окно перед закрытием

window.opener.location.href = window.opener.location.href;
window.close();
0 голосов
/ 21 сентября 2015

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

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

function setWindowObjectInParent(obj)
{
popupwindow = obj;
}

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

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

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

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

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

0 голосов
/ 07 июня 2011

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

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

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

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

...