Независимый от браузера интерфейс C ++ DOM - PullRequest
6 голосов
/ 12 января 2009

При программировании на C ++ для браузера DOM каждый движок имеет свой набор интерфейсов, IE использует COM [MSHTML] (http://msdn.microsoft.com/en-us/library/aa752279(VS.85).aspx), Mozilla имеет XPCOM на основе Gecko DOM и т. д.

Существует ли общий API с адаптерами для основных браузеров (и версий)?


Как пояснение, рассматриваемое приложение - это настольное приложение, написанное на C ++, которое взаимодействует с браузерами, в настоящее время у нас есть отдельные базы кода для поддержки IE и Mozilla, и я пытаюсь уменьшить дублирование логики и разрешить добавление новых браузеров с меньшими усилиями.

Конкретным примером может быть получение свойства innerHTML HTML-элемента.

// Firefox
nsAutoString html;
nsCOMPtr<nsIDOMNSHTMLElement> elem = do_QueryInterface(obj);
if (elem)
    elem->GetInnerHTML(html); 

// IE
CComBSTR html;
MSHTML::IHTMLElementPtr elem = obj;
if (elem) 
     elem->get_innerHTML(&html);

Ответы [ 4 ]

5 голосов
/ 27 января 2009

Кажется, вам лучше всего определить собственный интерфейс и написать различные адаптеры. Вероятно, что ваш код C ++ не будет использовать все возможности обхода DOM, ваш интерфейс должен будет только определить компактный набор функций обхода.

В качестве бонуса для определения собственного интерфейса вы можете легко написать макет адаптера для вашего модульного тестирования.

1 голос
/ 14 января 2009

Я никогда не видел ни одного. Для моего программного обеспечения я просто написал расширение в javascript в Firefox, а затем создал Internet Explorer BHO (который я еще не закончил).

0 голосов
/ 30 января 2009

Moonlight выпущен под LGPL, они могут иметь что-то полезное для вас, если лицензирование в порядке.

0 голосов
/ 14 января 2009

Есть причина, почему это должен быть C ++? Вы не можете использовать JQuery? Или что-то вроде http://webkit.org/blog/156/queryselector-and-queryselectorall/ в WebKit может помочь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...