Обработка дочерних и внучатых окон в Javascript

У меня есть главное окно (№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?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
4 877
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

function onLoad() {
  window.grandparent = window.opener.opener;
}
Ответ принят как подходящий

В третьем окне вы вводите:

<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 !-";

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

parent = window.opener.opener

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

var main_window = get_main_window();
function get_main_window(){
    var w = window;
    while(w.opener !== null){
        w = w.opener;
    }
    return w;
}

Пожалуйста, избегайте ответов только с кодом и дайте пояснения вместе с кодом.

Emile Bergeron 09.11.2016 06:59

Другие вопросы по теме