Обработка дочерних и внуковых окон в Javascript - PullRequest
2 голосов
/ 27 октября 2008

У меня есть главное окно (# 1) на моей веб-странице, из которого я открываю новое окно браузера (# 2), из которого я открываю новое окно (# 3).

Теперь, если мой пользователь закрывает окно № 2 перед окном № 3, у меня проблема в том, что окно № 3 больше не может вызывать функцию в своем window.opener, так как оно ушло.

То, что я хотел бы сделать, это установить окно № 3. открывать окно № 1, когда окно № 2 закрывается.

Я пытался сделать это в окне №2 (кстати, я использую jquery):

var children = [];
$(window).unload( function( ) {
    $.each( children, function( p, win ) {
        if ( win ) {
            win.opener = window.opener;
            }
    } );
} );

Когда загружено окно № 3, я добавляю окно к массиву потомков в окне № 2.

Но все же, когда окно № 2 закрыто перед окном № 3, window.opener окна № 3 не указывает на окно № 1.

Как мне убедиться, что мое большое дочернее окно (окно № 3) все еще может вызывать главное окно (окно № 1) после закрытия окна № 2?

Ответы [ 5 ]

3 голосов
/ 27 октября 2008

В третьей строке вы вводите:

<script type="text/javascript">
  var grandMother = null;
  window.onload = function(){
    grandMother = window.opener.opener;
  }
</script>

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

if(grandMother)
      grandMother.document.getElementById("myDiv").firstChild.nodeValue ="Greetings from your grandchild !-";
1 голос
/ 27 октября 2008

Вам следует создать ссылку на главное окно, когда откроется третье:

parent = window.opener.opener

Это переживет второе закрытие окна.

0 голосов
/ 08 ноября 2016
var main_window = get_main_window();
function get_main_window(){
    var w = window;
    while(w.opener !== null){
        w = w.opener;
    }
    return w;
}
0 голосов
/ 27 октября 2008

window.opener, вероятно, только для чтения. Я бы настроил ваше собственное свойство, чтобы ссылаться на дедушку при загрузке внука.

function onLoad() {
  window.grandparent = window.opener.opener;
}
0 голосов
/ 27 октября 2008

Это может быть тангенциальным, но зачем вам нужно открывать 3 отдельных окна? Можете ли вы использовать вместо этого диалог JQuery? Я очень расстраиваюсь, когда приложения открывают для меня окна.

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