При программировании на 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);