Закрытие детских окон от Javascript - PullRequest
1 голос
/ 15 марта 2012

Я искал решение своей проблемы все выше и ниже, и могу найти только кусочки головоломки без возможности их соединить. У меня есть окно (которое оно является дочерним по отношению к основному окну), которое может открывать несколько других окон. Я хочу, чтобы дочерние окна были закрыты при закрытии родителя, звучит достаточно просто, верно?

Вот дилемма, мое родительское окно выполняет обратную передачу при открытии дочернего элемента, поэтому любой массив дескрипторов (которые также являются объектами), которые я храню, не сохраняется. Я рассмотрел сериализацию и десериализацию этого массива и хранение его в скрытом поле, но это не кажется лучшим решением. Я также не могу получить доступ к родительскому окну, делающему открытие.

Помимо Javascript, код на стороне сервера написан на C #, и я использую asp.net. Есть ли разумное решение для этого? Я должен также упомянуть, что код, с которым я работаю, был написан несколькими разными людьми задолго до того, как я до него дошел, поэтому я хотел бы добавить к нему, а не изменять, как работает большая его часть.

Наконец, я знаю, что, как правило, неплохо размещать здесь свой код, но я просто использую var win = window.open для выполнения задачи открытия окна.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Хорошо, тогда я вижу 3 способа обойти эту проблему:

  • Не используйте несколько окон браузера, а стилизуйте свою страницу, чтобы показать все диалоги;как предложил @Gats.Хорошо, это несколько ограничит вас, если вы хотите, чтобы ввод родительских «окон» был постоянным при навигации по дочернему окну.
  • Не выполняйте постбэк обновления для выгрузки родителя.Вместо этого используйте Ajax для отправки данных на сервер приложений
  • Вы не можете хранить (оконные) объекты, вы можете хранить только строки.При открытии окна вы можете дать ему «целевое» имя, и любой другой window.open с такой же целью (именем) будет использовать уже открытое.При этом вы можете ссылаться на окна, которые вы сами не открывали - и закрывать их.См https://stackoverflow.com/a/563478/1048572
0 голосов
/ 15 марта 2012

А как же

var wins = [];
function newChildWindow(...) {
    wins.push(window.open(...));
}
window.onuload = function() {
    for (var i=0; i<wins.length; i++)
        if (!wins[i].closed)
            wins[i].close();
};
...