За последние 24 часа нас посетили 22272 программиста и 1032 робота. Сейчас ищут 754 программиста ...

window.opener и перегрузка

Тема в разделе "JavaScript и AJAX", создана пользователем romt, 26 ноя 2020.

  1. romt

    romt Новичок

    С нами с:
    26 ноя 2020
    Сообщения:
    7
    Симпатии:
    0
    При перезагрузке материнского окна теряется ссылка на дочернее окно. Как сохранить?

    Подробнее.
    Есть страница с данными. Если надо что-то изменить, по кнопке вызывается дочернее окно. Дочернее окно посылает данные на сервер, и после подтверждения сервера перезагружает себя и материнскую страницу.
    Но при этом, если закрывают/перезагружают материнскую страницу саму по себе, она должна за собой все дочерние окна закрыть.

    Реализовано было так (довольно давно):

    На материнской странице:
    Код (Text):
    1. <script>
    2.  
    3. // переменная дочернего окна
    4. var subWin;
    5.  
    6. // флаг, закрывать ли дочернее окно
    7. var subWindowsClose = true;
    8.  
    9. // функция открытия дочернего окна
    10. function openSubWindow()
    11. {
    12.     subWin = window.open('editingdata.html');
    13. }
    14.  
    15. // функция закрытия дочернего окна при закрытии/перезагрузке
    16. // при условии установки флага
    17. window.onunload = function() {
    18.     if(subWinClose == true) {
    19.         if(typeof subWin !== 'undefined') { subWin.close(); };
    20.     };
    21. };
    22.  
    23. </script>
    На дочерней странице
    Код (Text):
    1. <script>
    2. function windowsReload() {
    3.     window.opener.subWinClose = false;
    4.     window.opener.location.reload();
    5.     window.location.reload();
    6. };
    7. </script>
    При корректном внесении данных на дочерней странице вызывается функция windowsReload, которая устанавливает на материнской странице флаг "не закрывать дочернее окно", и перезагружает всё.

    Ныне все мануалы рекомендуют глобальные переменные не юзать. Как в этом случае обойтись без них - придумать не могу. Ну ладно, хотя бы спрятал их в объект по образцу https://learn.javascript.ru/global-object

    Проблема в том, что переменная дочернего окна, даже если её внести в глобальный массив, при перезагрузке теряется. Я проверял. undefined.
    То есть после первой перезагрузке материнского окна, дочерние уже не закрываются сами.

    Что можно придумать, что бы осовременить, но сохранить функциональность?

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