浏览器不可知的C ++ DOM接口

时间:2009-01-12 13:44:51

标签: c++ dom cross-browser

当使用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);

4 个答案:

答案 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/这样的东西可能会起作用..