6

在 C++ 中针对浏览器的DOM进行编程时,每个引擎都有一组不同的接口,IE 具有基于 COM 的 [MSHTML]( http://msdn.microsoft.com/en-us/library/aa752279(VS.85).aspx ) , Mozilla 有基于XPCOMGecko DOM等。

是否有一个通用 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

4 回答 4

5

您最好的选择似乎是定义自己的接口并编写不同的适配器。很可能您的 C++ 代码不会使用所有 DOM 遍历功能,您的界面只需要定义一组紧凑的遍历函数。

作为定义自己的接口的一个好处,您可以轻松地为您的单元测试编写一个模拟适配器。

于 2009-01-27T15:01:50.907 回答
1

我从来没有见过一个。对于我的软件,我简单地用 Firefox 的 javascript 编写了扩展,然后创建了一个 Internet Explorer BHO(我还没有完成)。

于 2009-01-14T05:13:48.487 回答
0

Moonlight 是在 LGPL 下发布的,如果许可没问题,他们可能会有一些对你有用的东西。

于 2009-01-29T22:09:06.950 回答
-6

有什么理由必须是 C++ 吗?你不能使用 jQuery 吗?或者 WebKit 中的http://webkit.org/blog/156/queryselector-and-queryselectorall/之类的东西可能会奏效..

于 2009-01-14T16:45:42.863 回答