2009-07-01 2 views
3

С некоторым Javascript я OpenUP всплывающего окна не пробами с помощью:Закрыть всплывающее окно, если оно существует

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

Я затем запустить некоторый PHP скрипт, который refreshs перезагружает страницу.

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

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

ответ

3

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

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(); 
    } 
} 
+0

Это не работает в FF 3.0.11 –

+0

Вы просто избили меня до этого! .. хороший. – thegunner

+0

Но он будет работать без утверждения if. : S myWindow = window.open ("", "windowName"); myWindow.close(); –

0

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

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

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

, а затем работать на победу.

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

-1

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

0

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