Как браузер может отслеживать всплывающее окно? - PullRequest
1 голос
/ 02 марта 2011

Я заметил, что при использовании функции чата Google из вашей Почты Google вы можете открыть чат в своем собственном окне.Затем, когда я подошел, чтобы закрыть окно Google Mail, он предупредил, что другие окна также будут закрыты, если я продолжу, а затем отобразил список окон.Как это сделать?Можно ли отследить, было ли вызванное вами окно закрыто?

Ответы [ 2 ]

4 голосов
/ 02 марта 2011

Да, когда вы открываете window.open в JavaScript, вы можете установить его в переменную вроде:

myWindow = window.open(...)

Тогда вы можете привязать события к этому окну, как:

myWindow.onUnload = funcWindowClosed;

Вы можете отслеживать несколько всплывающих окон, помещая их в массив.

Вы также можете вызывать функции JavaScript в родительском окне через дочернее (всплывающее) окно, используя:

window.opener
0 голосов
/ 02 марта 2011

Если вы назначаете каждому новому окну имя, когда вы делаете его всплывающим, а затем с помощью php (или чего-либо еще) сохраняете имя окна в файле cookie или сеансе, вы можете затем закрыть все всплывающие окна, созданные вашим сайт при совершении определенного действия:

это то, что я делаю (в php / js):

function closePopups(){
    var popups = Array();
    <?
    $i = 0;
    if(isset($_SESSION['popups'])){
        foreach($_SESSION['popups'] as $key=>$pop){
            echo "popups[$i] = '$pop';\n";
            $i++;
        }
        unset($_SESSION['popups']);
    }
?>
    for( i = 0; i < popups.length; i++ ){
        window.open('',popups[i],'width=1,height=1').close();
    }
}

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

Вот так я решил проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...