Проверьте, закрыто ли всплывающее окно
Я открываю всплывающее окно с
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 при закрытии всплывающего окна и установке объекта при его открытии.
Таким образом, вы можете проверить, определено ли ваше всплывающее окно, а затем вызвать фокус.