Scud
Новичок
Рецепт (Паттерн?) меж оконного взаимодействия.
Может кому пригодиться.
Часто при риализации сложного UI с помощью JS/HTML необходимо показать пользователю некий диалог при закрытии которого
данные, выбранные пользователем в диалоге, отправлются главному приложению (окну в котором бежит основной скрипт
приложения).
Открыть окно и загрузить в него код диалога легко и просто (window.open нам поможет)
А вот чтобы передать данные назад, а также отловить момент закрытия окна (чтобы провести анализ полученных данных), приходиться придумывать разные хитроумные способы . Модальные диалоги IE я отбрасываю сразу так как не crossbrowser
Один из способов может быть таким:
- window.open() вторым параметром принимает имя нового окна
- это имя доступно в открытом окне с помощью свойства window.name
- для того чтобы передать данные диалога родительскому окну нужно использовать свойства окна window.opener и window.name
- код для открытия окна диалога должен быть таким
p.s. Может конечно велосипед... так что если что звиняйте.
Может кому пригодиться.
Часто при риализации сложного UI с помощью JS/HTML необходимо показать пользователю некий диалог при закрытии которого
данные, выбранные пользователем в диалоге, отправлются главному приложению (окну в котором бежит основной скрипт
приложения).
Открыть окно и загрузить в него код диалога легко и просто (window.open нам поможет)
А вот чтобы передать данные назад, а также отловить момент закрытия окна (чтобы провести анализ полученных данных), приходиться придумывать разные хитроумные способы . Модальные диалоги IE я отбрасываю сразу так как не crossbrowser
Один из способов может быть таким:
- window.open() вторым параметром принимает имя нового окна
- это имя доступно в открытом окне с помощью свойства window.name
- для того чтобы передать данные диалога родительскому окну нужно использовать свойства окна window.opener и window.name
Код:
/// Метод вызывается при закрытии диалога, может быть присвоен событию onclick какой-либо кнопки, например.
function onClose()
{
/// Сначала сохраняем данные введённые пользователем в диалоге
if (window.opener && !window.opener.closed) {
window.opener[window.name] = 'Данные из диалога';
}
/// А теперь оповещаем родительское окно о том что нас собственно закрыли
if (window.opener[window.name+"OnClose"]) {
window.opener[window.name+"OnClose"]();
}
}
Код:
window.open('/path/to/dialog', 'dialog');
dialogOnClose()
{
alert(window['dialog']);
}