当使用C ++对浏览器DOM编程时,每个引擎都有一组不同的接口,IE基于COM [MSHTML](http://msdn.microsoft.com/en-us/library/aa752279(VS.85).aspx),Mozilla基于XPCOM Gecko DOM 3}}等。
对于主要浏览器(和版本),是否有一个具有adapters的通用API?
作为澄清,有问题的应用程序是一个用C ++编写的桌面应用程序,它与浏览器交互,目前我们有单独的代码库来支持IE和Mozilla,我正在尝试减少逻辑重复并允许添加新的浏览器用更少的努力。
具体示例可以是获取HTML元素的innerHTML属性。
// 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);
答案 0 :(得分:5)
您最好的选择似乎是定义自己的界面并编写不同的适配器。由于您的C ++代码不会使用所有DOM遍历功能,您的界面只需要定义一组紧凑的遍历函数。
作为定义自己界面的好处,您可以轻松地为单元测试编写模拟适配器。
答案 1 :(得分:1)
我从未见过一个人。对于我的软件,我简单地在Firefox的javascript中编写了扩展,然后创建了一个Internet Explorer BHO(我还没有完成)。
答案 2 :(得分:0)
Moonlight是在LGPL下发布的,如果许可合适,它们可能会有一些可用的东西。
答案 3 :(得分:-6)
为什么它必须是C ++?你不能使用jQuery吗?或者像WebKit中的http://webkit.org/blog/156/queryselector-and-queryselectorall/这样的东西可能会起作用..