Полезная информация

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№128-05-2010 12:14:36

RANII
Участник
 
Группа: Members
Зарегистрирован: 28-05-2010
Сообщений: 4
UA: Firefox 3.0

Проблема с Delphi Gecko SDK

Доброго времени суток!
Работая с 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 та же ерунда :(
Сталкивался ли кто-нибудь с подобной проблемой и как можно ее решить?

Отсутствует

 

№228-05-2010 14:55:29

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 10.5

Re: Проблема с Delphi Gecko SDK

Может быть GUID неправильный. В 3.6 для nsIDOMNSElement {C9BA11BC-32D4-425E-A91F-7E0939C39251}
В 3.0.5 можно проверить с помощью XPCOMViewer.

Отсутствует

 

№328-05-2010 15:50:49

RANII
Участник
 
Группа: Members
Зарегистрирован: 28-05-2010
Сообщений: 4
UA: Firefox 3.0

Re: Проблема с Delphi Gecko SDK

Спасибо за совет :) Действительно в 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 верный в объявлении)

Отсутствует

 

№401-06-2010 23:15:49

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 10.5

Re: Проблема с Delphi Gecko SDK

Интерфейс такой, проверте.

Выделить код

Код:

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;

Отсутствует

 

№502-06-2010 15:42:53

RANII
Участник
 
Группа: Members
Зарегистрирован: 28-05-2010
Сообщений: 4
UA: Firefox 3.0

Re: Проблема с Delphi Gecko SDK

Попробовал, только что-то странное происходит...
Результат выполнения QueryInterface при получении интерфейса выдает 0
Пытаюсь вызывать методы, тут и начинается:
при вызове GetClientTop результат = NS_ERROR_NO_INTERFACE, aClientTop = 0;
при вызове GetClientLeft результат = 2, aClientLeft = 0;
при вызове GetClientHeight результат = 1, aClientHeight = 0;
при вызове GetClientWidth результат = 0, но при этом в aClientWidth возвращаются восьмизначные числа (думаю для ширины это многовато :) )

Отсутствует

 

№602-06-2010 15:56:41

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 10.5

Re: Проблема с Delphi Gecko SDK

GUID на 3.0.5 меняли? Я забыл указать ваш. Этот для 3.6

Отредактировано Elexander (02-06-2010 15:57:32)

Отсутствует

 

№702-06-2010 16:06:54

RANII
Участник
 
Группа: Members
Зарегистрирован: 28-05-2010
Сообщений: 4
UA: Firefox 3.0

Re: Проблема с Delphi Gecko SDK

Менял :)

Отсутствует

 

№802-06-2010 18:34:44

Elexander
Участник
 
Группа: Members
Зарегистрирован: 06-10-2008
Сообщений: 54
UA: Opera 10.5

Re: Проблема с Delphi Gecko SDK

Пришлите исходники вашего XPCOM компонента мне на почту, я посмотрю на выходных. Только удалите все лишнее. Оставте только проблемное место. И еще pas-файлы вашего Gecko SDK, может быть в нем проблема.
elexander [at] ukr.net

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]