Закройте всплывающее окно, если оно существует


С помощью некоторого javascript я открываю всплывающее окно no prob, используя:

function myPopup2(x){
    if (x==1)
    {
        myWindow = window.open( "timer.html", "", "height = 150, width = 300" );
    }else
    {
        myWindow.close();
    }
}

Затем я запускаю какой-то PHP скрипт, который обновляет перезагружает страницу.

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

Кто-нибудь знает, как я могу обойти это?

4 3

4 ответа:

Если вы даете своему окну имя, когда вы открываете его, можно получить дескриптор к окну позже.

function myPopup2(x){
    if (x==1)
    {
        myWindow = window.open( "timer.html", "windowName", "height = 150, width = 300" );
    }else
    {
        if (!myWindow) {
            myWindow = window.open("", "windowName");
        }
        myWindow.close();
    }
}

Как описано здесь: http://www.faqts.com/knowledge_base/view.phtml/aid/1460

Окно.open() принимает второй параметр, который является именем окна. При обновлении вы можете проверить состояние этого окна и при необходимости закрыть его. Как описано в ссылке, нет прямого способа проверить наличие окна после обновления, поэтому вам нужно сделать что-то вроде этого:

var win = window.open ('', 'windowName')

И затем действуйте на победу.

(edit: у меня изначально была вторая идея, связанная с печеньем, но Я не думаю, что это действительно спасает вас от чего-либо, так как вы все еще должны сделать выше, чтобы получить доступ к окну.)

Пусть дочернее окно выполняет функцию каждые несколько секунд, чтобы проверить родительское окно на наличие флага, сигнализирующего о его закрытии. Родительское окно может установить флаг на перезагрузку вместо того, чтобы пытаться выследить ребенка.

Я думаю, что вы не можете. вызвать дочернее окно (таймер.html) теряет связь с родительским окном, как только вы его обновите. Было бы очень страшно, если бы вы могли закрыть каждое окно изнутри другого окна без какой-либо связи между обоими.