Страницы: 1
Могу ли я передать весь объект window в мою компоненту? если да то как?... или я могу передать объект nsIDOMWindow - но если получить его в JS, то не представляю как его передать и потом как с ним работать (была бы благодарна если бы скинули какую-то ссылку на исходники компоненты, в которую передается один из интерфейсов "nsI")....
Отсутствует
Могу ли я передать весь объект window в мою компоненту?
-- откуда,
-- в какую компоненту,
-- для чего?
Моему приложению требуется обращаться к Mozilla и получать информацию о элементах на страничке, их значениях, позиции и т.д. Для IE я просто написала Hook.
Для Mozilla - написала компоненту и расширение. В расширении просто загружаю свою компоненту:
const cid = "@mydomain.com/XPCOMSample/MyComponent;1";
obj = Components.classes[cid].createInstance();
потом отлавливаю сообщение click и уже через компоненту переправляю необходимые данные в мое приложение (посылаю сообщение окну).
Но не все меня устраивает - например мне вообще не следует передавать управление Mozilla, то есть мое приложение не должно терять фокус.
Решила сделать так - при событии load - в компоненту передавать все данные об окне. А в компоненте создать окно и потом уже просто обмениваться через компоненту с приложением сообщениями - не обращаясь к расширению... А вот как все данные об окне передать не знаю....
Отсутствует
Компонента, как я понимаю, написана на C++.
потом отлавливаю сообщение click и уже через компоненту переправляю необходимые данные в мое приложение (посылаю сообщение окну).
(я сам в cpp не силён и под рукой литературки нет, могу ошибиться в написании и не только) Речь идёт о всяких Post/SendMessage? А там разве нельзя передать сообщение приложению без передачи фокуса окну этого приложения?
Решила сделать так - при событии load - в компоненту передавать все данные об окне.
Здесь сразу возникает такой момент: не факт, что окно останется неизменным после "load".
Ладно.
Имеем, допустим, components/nsMyComponent.dll и chrome/../content/myWindowHandler.js. Если я правильно понял, то myWindowHandler.js отлавливает "load" и передаёт данные в nsMyComponent.dll. В духе "window.document.title", "window.location", "window.document.innerHTML" и т.д. Вы же хотите целиком передать window в компоненту и далее манупулировать этим объектом там.
В чём сложности? Не знаете что писать в IDL компоненты или дело в чём-то другом?
P.S. Ещё раз обращаю внимание на привязку к событию "load" -- если хотите получать "текущее" состояние документа, то подход нужно пересмотреть. В расширении можно оставить одну лишь компоненту. При "внешнем" обращении она должна найти текущую вкладку-->документ (если вас, конечно, интересует информация о просматриваемом в данный момент документе; если интересует последний загруженный документ, то можно и по "load", только получить нужно ссылку [у вас здесь загвоздка?], а не перечисление свойств в какой-то момент времени) и передавать его свойства.
Вот только общение между этими двумя программами я представляю смутно. Тема мне интересна, я бы поэкспериментировал, но, к сожалению, суток двое для этого не будет ни средств, ни времени; да и вряд ли помогу, т.к. знания cpp оставляют желать самого лучшего.
Отредактировано Mash (02-02-2006 15:44:03)
Отсутствует
P.P.S. Если дело в IDL, то попробуйте что-нибудь в духе
#include "nsISupports.idl" interface nsIDOMAbstractView; [scriptable, uuid(........................................)] interface nsIMyComponent : nsISupports { //....................... void setWindow(in nsIDOMAbstractView aWindow); };
В этом вопрос?
Отсутствует
Спасибо всем кто ответил. Я в конце концов разобралась и добавляю так:
const accServiceID = '@mozilla.org/accessibilityService;1';
const accServiceIF = Components.interfaces.nsIAccessibilityService;
const accService = Components.classes[accServiceID].getService(accServiceIF);
var acc = accService.getAccessibleFor(window.content.document);
var dom_window = acc.QueryInterface(Components.interfaces.nsIAccessibleDocument);
obj.SetBrWindow(dom_window); // obj- моя компонента
Надеюсь что правильно, вроде работает Я делаю это так еще из-за того, что хочу получить HWND окна, но это у меня и не работает, может кто-то подскажет, что делаю не так:
HWND* DocWindow;
rv = g_window->GetWindowHandle((void**)&DocWindow);
Это уже в моей компоненте, написанной на С++. Почему-то оно или вылетает или *DocWindow равно нулю. g_window - это переданный из расширения элемент Components.interfaces.nsIAccessibleDocument.
Всю остальную схему реализовать удалось. Обмен сообщениями между приложениями тоже. Могу впринципе что-то описать подробнее, если кому-то интересно.
Отсутствует
И еще один вопрос. Чтобы добавить мою компоненту в 1.0.6 - я удаляла файлы - compreg.dat и xpti.dat и потом добавляла в директорию components - два своих файла *.dll и *.xpt. Хочу проверить свою компоненту под Mozilla 1.5 - но эта схема не проходит... почему-то файлы compreg.dat и xpti.dat не обновляются...
не понимаю как подключить компоненту под Mozilla 1.5
Отсутствует
Разобралась - обновляются файлы...(столько юзеров на компе - не разобралась не у того удаляла файлы... - не свой тесторский комп) но компонента почему-то все равно не работает... может что-то надо делать по другому в Mozilla 1.5?
Отсутствует
Mozilla 1.5 -- достаточно старая версия, лучше делайте под 1.7+, не младше (если, конечно, в ТЗ обратное не указано чётко). Но знайте, что это просто моё сугубо личное мнение.
По остальному мне сказать что-то определённое достаточно сложно: с Accessible в js дел не имел, а уж про C++ вообще молчу в тряпочку.
obj.SetBrWindow(dom_window); // obj- моя компонента
Здесь "dom_window" существует? Я полагаю, что вы проверяли это, но просто уточнить, на всякий случай...
rv = g_window->GetWindowHandle((void**)&DocWindow);
Здесь тот же вопрос: "g_window" существует, с ним всё в порядке?
И ещё один: что у вас записано в IDL в плане этого самого "g_window"?
Всю остальную схему реализовать удалось. Обмен сообщениями между приложениями тоже. Могу впринципе что-то описать подробнее, если кому-то интересно.
Интересно, да. Если не сложно, то распишите; надеюсь, что модераторы с пониманием отнесутся даже к большому по объёму трактату, тем более, что самому сайту это описание только в плюс.
Отсутствует
Страницы: 1