Xpoint
   [напомнить пароль]

Доступ к объекту JS родительского окна из IFRAME

Метки: [без меток]
2008-09-09 19:27:48 [обр] Aleksey[досье]
Добрый вечер!
Есть XUL окно (win1), при его инициализации средствами JS создается объект (obj1) со своими функциями и переменными.
Есть второе XUL окно (win2) (обрамленно в <page>), которое загружается в iframe первого.
При нажатии кнопки на кнопке в win2, после некоторых действий, необходимо вызвать obj1.func(). Возможно ли это?
На эксперименты убил полдня, результат = 0.
Может подскажите другое простое межоконное взаимодействие.
Забыл сказать, оба окна в chrome, в одном расширении.
Не судите строго: я в XUL новичек.
спустя 1 час 28 минут [обр] papa-din[досье]
parent.obj1.func()
спустя 11 часов [обр] Aleksey[досье]
сообщение промодерировано
parent.obj1.func()

На обычных окнах это работает (когда окно создано отображено из обработчика другого окна, а моем фрейме не работает:

Ошибка: parent.obj1 is undefined
Источник: chrome://ext1/content/login.js
Строка: 15

Первое окно:

<?xml version="1.0" encoding="UTF-8"?>
...
<window id="win1" name="win1" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" title="&main.title;" chromehidden="location toolbar menubar directories extrachrome" xmlns:em="http://www.mozilla.org/2004/em-rdf#" onload="return obj1.loadForm()" >
   <script type="application/x-javascript" src="chrome://ext1/content/main.js"/>
...
<iframe name="Ext1-DataIframe1" id="Ext1-DataIframe1" src="" flex="1"/>
...

Позже, по событию в src Ext1-DataIframe1 пишется "win2.xul" а при нажатии кнопки на win2 должна вызываться ф-ция объекта obj1 скрипта main.js Нужный мне объект создается, и с ним прекрасно работает win1.
Может что то с безопасностью, или не правильно описал iframe?

спустя 1 день 4 часа [обр] papa-din[досье]
Aleksey[досье]
Закинь ко мне в почту весь код, будет время посмотрю papa-din@mail.ru
спустя 1 день 6 часов [обр] Aleksey[досье]

papa-din[досье]
Спасибо за информацию. Очень помогла.

For All:
Вдруг, кому понадобится...
в манифесте надо прописать: content ext1 chrome/content/ xpcnativewrappers=no
А вызов делать так: parent.obj1.func();

спустя 23 дня [обр] Владимир Палант(434/4445)[досье]

Более подробно:

Писать xpcnativewrappers=no не надо. Этим вы отключите функцию, которая обеспечивает безопасный доступ к интернет-страницам из расширения. См. http://developer.mozilla.org/en/XPCNativeWrapper

Один из безопасных вариантов: parent.location.href = "javascript:void obj1.func()" (таким образом JavaScript-код выполнится в контексте нужной страницы, гарантированно без прав расширения).

спустя 7 часов [обр] Aleksey[досье]
Владимир Палант[досье],
Спасибо за информацию, но описанный вами метод мне не подходит.
Фрейм, это тоже мое XUL окно, и никакие скрипты, кроме моих, исполнятся не будут.
Все равно хотел отказываться от frame, еще один довод. Буду создавать окно динамически.
спустя 9 минут [обр] Владимир Палант(434/4445)[досье]
сообщение промодерировано
Видимо не сильно "мое", раз идет доступ из доверенного chrome-скрипта к окну с ограниченными правами. Учтите, что при загрузке с HTTP "свой" сервер запросто подменяется на чужой.
спустя 23 минуты [обр] Aleksey[досье]

Есть main.xul окно, "разделенное" по вертикали (в hbox-е два vbox-а). Слева меню. Справа отображаются результаты кликов на меню слева.
Есть пункт меню login, есть login.xul (сделано для удобства локализации и по понятиям правильности). Нужно отобразить этот login.xul в правой версии vbox. Из login.xul нужно вызвать ф-цию объекта основного окна. Таких вспомогательных форм несколько.
Данные с сервера загружаются, но жестко вырезается все, кроме нужных данных. Скрипты, полученные из инета не выполняются.

p.s. Подменить можно не только HTTP, и тоже запросто.

спустя 3 минуты [обр] Aleksey[досье]
Может кто подскажет более правильное решение, а то iframe мне уже самому не нравится. Но со всеми "прелестями" *.xul, *.dtd, *.css ?
Powered by POEM™ Engine Copyright © 2002-2005