При программировании на C++ против ДОМ браузера каждый движок имеет свой набор интерфейсов, IE использует [MSHTML] на основе COM (http://msdn.microsoft.com/en-us/library/aa752279(VS.85).aspx), Mozilla использует Геккон ДОМ на основе XPCOM и т. д.)
Есть ли общий 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);





Никогда не видел. Для своего программного обеспечения я просто написал расширение в javascript Firefox, а затем создал Internet Explorer BHO (который я еще не закончил).
По какой причине это должен быть C++? Разве вы не можете использовать jQuery? Или что-то вроде http://webkit.org/blog/156/queryselector-and-queryselectorall/ в WebKit может помочь ..
Лучше всего, по-видимому, определить свой собственный интерфейс и написать разные адаптеры. Вероятно, что ваш код C++ не будет использовать все возможности обхода DOM, ваш интерфейс должен будет только определить компактный набор функций обхода.
В качестве бонуса за определение собственного интерфейса вы можете легко написать макет адаптера для модульного тестирования.
Moonlight выпускается под LGPL, у них может быть что-то полезное для вас, если с лицензией в порядке.
Что такое лунный свет? Я вижу, что есть реализация Silverlight Mono с таким именем, но здесь это не имеет значения.
Moonlight - это, как вы говорите, реализация Silverlight, просто подумал, что у них, вероятно, такая же проблема, как и у вас; взаимодействие с браузерами разных версий. Поэтому я предполагаю, что у них есть адаптеры для разных браузеров, которые можно использовать повторно.