>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Передать window в компоненту http://forum.mozilla-russia.org/viewtopic.php?id=8022 |
Aerina > 01-02-2006 17:45:22 |
Могу ли я передать весь объект window в мою компоненту? если да то как?... или я могу передать объект nsIDOMWindow - но если получить его в JS, то не представляю как его передать и потом как с ним работать (была бы благодарна если бы скинули какую-то ссылку на исходники компоненты, в которую передается один из интерфейсов "nsI").... |
ViRUS > 02-02-2006 04:10:17 |
Aerina |
Mash > 02-02-2006 07:51:24 |
-- откуда, |
Aerina > 02-02-2006 13:47:49 |
Mash пишет
Моему приложению требуется обращаться к Mozilla и получать информацию о элементах на страничке, их значениях, позиции и т.д. Для IE я просто написала Hook. |
Mash > 02-02-2006 15:39:22 |
Компонента, как я понимаю, написана на C++.
(я сам в cpp не силён и под рукой литературки нет, могу ошибиться в написании и не только) Речь идёт о всяких Post/SendMessage? А там разве нельзя передать сообщение приложению без передачи фокуса окну этого приложения?
Здесь сразу возникает такой момент: не факт, что окно останется неизменным после "load". Ладно. В чём сложности? Не знаете что писать в IDL компоненты или дело в чём-то другом? P.S. Ещё раз обращаю внимание на привязку к событию "load" -- если хотите получать "текущее" состояние документа, то подход нужно пересмотреть. В расширении можно оставить одну лишь компоненту. При "внешнем" обращении она должна найти текущую вкладку-->документ (если вас, конечно, интересует информация о просматриваемом в данный момент документе; если интересует последний загруженный документ, то можно и по "load", только получить нужно ссылку [у вас здесь загвоздка?], а не перечисление свойств в какой-то момент времени) и передавать его свойства. Вот только общение между этими двумя программами я представляю смутно. Тема мне интересна, я бы поэкспериментировал, но, к сожалению, суток двое для этого не будет ни средств, ни времени; да и вряд ли помогу, т.к. знания cpp оставляют желать самого лучшего. |
Mash > 02-02-2006 15:49:01 |
P.P.S. Если дело в IDL, то попробуйте что-нибудь в духе Выделить код Код:#include "nsISupports.idl" interface nsIDOMAbstractView; [scriptable, uuid(........................................)] interface nsIMyComponent : nsISupports { //....................... void setWindow(in nsIDOMAbstractView aWindow); }; В этом вопрос? |
Aerina > 07-02-2006 14:46:25 |
Спасибо всем кто ответил. Я в конце концов разобралась и добавляю так: const accServiceID = '@mozilla.org/accessibilityService;1'; obj.SetBrWindow(dom_window); // obj- моя компонента Надеюсь что правильно, вроде работает Я делаю это так еще из-за того, что хочу получить HWND окна, но это у меня и не работает, может кто-то подскажет, что делаю не так: HWND* DocWindow; Это уже в моей компоненте, написанной на С++. Почему-то оно или вылетает или *DocWindow равно нулю. g_window - это переданный из расширения элемент Components.interfaces.nsIAccessibleDocument. Всю остальную схему реализовать удалось. Обмен сообщениями между приложениями тоже. Могу впринципе что-то описать подробнее, если кому-то интересно. |
Aerina > 07-02-2006 14:52:22 |
И еще один вопрос. Чтобы добавить мою компоненту в 1.0.6 - я удаляла файлы - compreg.dat и xpti.dat и потом добавляла в директорию components - два своих файла *.dll и *.xpt. Хочу проверить свою компоненту под Mozilla 1.5 - но эта схема не проходит... почему-то файлы compreg.dat и xpti.dat не обновляются... |
Aerina > 07-02-2006 15:07:06 |
Разобралась - обновляются файлы...(столько юзеров на компе - не разобралась не у того удаляла файлы... - не свой тесторский комп) но компонента почему-то все равно не работает... может что-то надо делать по другому в Mozilla 1.5? |
Mash > 08-02-2006 18:20:26 |
Mozilla 1.5 -- достаточно старая версия, лучше делайте под 1.7+, не младше (если, конечно, в ТЗ обратное не указано чётко). Но знайте, что это просто моё сугубо личное мнение. По остальному мне сказать что-то определённое достаточно сложно: с Accessible в js дел не имел, а уж про C++ вообще молчу в тряпочку. obj.SetBrWindow(dom_window); // obj- моя компонента rv = g_window->GetWindowHandle((void**)&DocWindow); И ещё один: что у вас записано в IDL в плане этого самого "g_window"? Aerina пишет
Интересно, да. Если не сложно, то распишите; надеюсь, что модераторы с пониманием отнесутся даже к большому по объёму трактату, тем более, что самому сайту это описание только в плюс. |