Страницы: 1
Доброго времени суток!
Работая с Gecko SDK 1.9 успешно подключился к браузеру FireFox (проверяю на 3.0.5), получил текст из элементов страницы, осталось получить их координаты. Вот тут и засада.
Объявил интерфейс:
nsIDOMNSElement = interface(nsISupports) ['{f0aef489-18c5-4de6-99d5-58b3758b098c}'] ... end;
Но при попытке перехода к нему от nsIDOMNode через QueryInterface постоянно получаю nil
Решил попробовать через nsIAccessibleRetrieval
NS_ACCESSIBLE_RETRIEVAL_CONTRACTID = '@mozilla.org/accessibleRetrieval;1'; ... nsIAccessibleRetrieval = interface(nsISupports) ['{244e4c67-a1d3-44f2-9cab-cdaa31b68046}'] ... end;
При попытке получить его через ComponentManager вываливается исключение 'Exception in safecall method', а при попытке создать его через CreateInstance... падает FF.
С nsIAccessibilityService та же ерунда
Сталкивался ли кто-нибудь с подобной проблемой и как можно ее решить?
Отсутствует
Спасибо за совет Действительно в 3.0.5 другой GUID -- '{CEA6F919-7FE6-4BDD-9DB6-158D9283F8D3}'
Но при вызове метода выдает вышеуказанное исключение. Может не правильно перевожу?
В nsIDOMNSElement.h метод описан так:
/* readonly attribute long clientTop; */ NS_IMETHODIMP nsDOMNSElement::GetClientTop(PRInt32 *aClientTop) { return NS_ERROR_NOT_IMPLEMENTED; }
Я пробовал два варианта:
procedure GetClientTop(out aClientTop: PRInt32); safecall; function GetClientTop(): PRInt32; safecall;
А что можно сделать в плане nsIAccessibleRetrieval? (GUID верный в объявлении)
Отсутствует
Интерфейс такой, проверте.
nsIDOMNSElement = interface(nsISupports) ['{C9BA11BC-32D4-425E-A91F-7E0939C39251}'] function GetElementsByClassName(const classes: nsAString; var _retval: nsIDOMNodeList): HRESULT; stdcall; function GetClientRects(var _retval: nsIDOMClientRectList): HRESULT; stdcall; function GetBoundingClientRect(var _retval: nsIDOMClientRect): HRESULT; stdcall; function GetScrollTop(out aScrollTop: Integer): HRESULT; stdcall; function SetScrollTop(aScrollTop: Integer): HRESULT; stdcall; function GetScrollLeft(out aScrollLeft: Integer): HRESULT; stdcall; function SetScrollLeft(aScrollLeft: Integer): HRESULT; stdcall; function GetScrollHeight(out aScrollHeight: Integer): HRESULT; stdcall; function GetScrollWidth(out aScrollWidth: Integer): HRESULT; stdcall; function GetClientTop(out aClientTop: Integer): HRESULT; stdcall; function GetClientLeft(out aClientLeft: Integer): HRESULT; stdcall; function GetClientHeight(out aClientHeight: Integer): HRESULT; stdcall; function GetClientWidth(out aClientWidth: Integer): HRESULT; stdcall; function GetFirstElementChild(out aFirstElementChild: nsIDOMElement): HRESULT; stdcall; function GetLastElementChild(out aLastElementChild: nsIDOMElement): HRESULT; stdcall; function GetPreviousElementSibling(out aPreviousElementSibling: nsIDOMElement): HRESULT; stdcall; function GetNextElementSibling(out aNextElementSibling: nsIDOMElement): HRESULT; stdcall; function GetChildElementCount(out aChildElementCount: Cardinal): HRESULT; stdcall; function GetChildren(out aChildren: nsIDOMNodeList): HRESULT; stdcall; end;
Отсутствует
Попробовал, только что-то странное происходит...
Результат выполнения QueryInterface при получении интерфейса выдает 0
Пытаюсь вызывать методы, тут и начинается:
при вызове GetClientTop результат = NS_ERROR_NO_INTERFACE, aClientTop = 0;
при вызове GetClientLeft результат = 2, aClientLeft = 0;
при вызове GetClientHeight результат = 1, aClientHeight = 0;
при вызове GetClientWidth результат = 0, но при этом в aClientWidth возвращаются восьмизначные числа (думаю для ширины это многовато )
Отсутствует
Пришлите исходники вашего XPCOM компонента мне на почту, я посмотрю на выходных. Только удалите все лишнее. Оставте только проблемное место. И еще pas-файлы вашего Gecko SDK, может быть в нем проблема.
elexander [at] ukr.net
Отсутствует
Страницы: 1