Программирование > JavaScript & JScript
Как происходит передача данных?
Phoinix:
Прикручивая визуальный html редактор к очередной CMS столкнулся с тем, что вообщем не понимаю, что делаю:
Задача такова:
При нажатии на кнопку меню появляется новое окно. В нем выбирается какой-то элемент, окно закрывается. Данные элемента передаются в родительское окно в определенную функцию для вставки в редактируемый html код.
У меня получилась такая функция:
В родительском окне:
function dialogInsertBlock()
{
var sURL = config.WM4ScriptPath + \'editor/browse_block.pl\' ;
var oWindow = window.open(sURL, \'\', \'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,titlebar=no,height=400,width=400\') ;
oWindow.insertHtml = insertHtml ;
}
function insertHtml(html) {
...
...
В дочернем окне:
function getBlock(bName)
{
window.opener.insertHtml(bName) ;
window.close() ;
}
...
...
...
<a href="javascript:getBlock(\'Text\');">Name</a>
...
...
...
Все прекрасно работает (IE точно, а совместимость с другими браузерами меня не волнует, т.к. сам редактор пашет только в EI).
Меня смущает строка:
oWindow.insertHtml = insertHtml ;
Никак не могу понять принцип её работы... :(
Мы добавляем в объект oWindow эту функцию, или же просто возвращаем данные из родительского окна? но тогда почему не передаем функции insertHtml никаких данных???
mike:
Здесь свойству insertHtml объекта oWindow присваивается ссылка на функцию insertHtml (в случае вызова функции после insertHtml стояли бы скобки). После этого свойство фактически становится методом объекта.
Phoinix:
mike
Спасибо, понял, но тогда еще вопрос:
window.opener.insertHtml(bName) ;
В дочернем окне происходит переход по ссылкам (то бишь, страница перегружается), но при этом ссылка на функцию insertHtml остается...
Нашел доку по opener которая говорит, что это окно предшественник, но при этом вне зависимости от количества переходов opener остается изначальным.
Или все таки window.opener - это свойства окна, и не относится к внутреммему html коду и переходам внутри окна?
mike:
opener - это ссылка на родительское окно (из которого было открыто текущее) и внутренние переходы на него не влияют
Phoinix:
mike
Тогда получается
oWindow.insertHtml = insertHtml ;
Лишняя строка? Зачем прицеплать функцию к окну, если мы обращаемся все-равно к родительскому...
Убрал её и тоже работает...
Навигация
Перейти к полной версии