什么是嵌入应用程序中的最佳HTML呈现引擎
What is the best HTML Rendering Engine to embed in an application?
目前,我们的应用程序使用Trident Win32组件,但出于几个原因,我们想放弃它,其中最主要的原因是我们希望跨平台。
我们正在研究WebKit和Gecko,但我很想在做出决定之前得到一些反馈。以下是一些最重要的要求:
-
它应该相对较快,占地面积较小。理想情况下,我们可以在不付出太多努力的情况下修剪掉任何我们不需要的东西。
-
体面的文件很重要。我预计不需要用它做任何不寻常的事情,但你永远不会知道。
-
我们使用的是C++,如果可能的话,我们希望使用设计良好的面向对象体系结构。
-
跨平台是必须的,从长远来看,良好的性能会有所帮助(我们最终可能会移植到移动平台)。
在做出决定之前,我需要考虑哪些因素吗?以前有人使用过WebKit或Gecko吗?如果是的话,有没有我觉得有用的文章或教程?
更新:
谢谢你们的回复。我们最终选择了Qt4.5,其中包括WebKit。到目前为止,我们真的很满意,事实上,我认为Qt可能是我用过的最好的UI框架;使用本机Win32 API进行编码与此之间的差异是惊人的。它也很容易学习,我们唯一的主要问题是习惯信号/插槽模式。
一点历史可能会帮助您做出决定。当苹果考虑在制作Safari时使用哪种引擎时,他们考虑了Gecko,但决定使用KHTML,并将其命名为WebKit。他们这样做的原因是,Gecko有大量遗留下来的Netscape漏洞,而且要复杂得多。
KHTML/WebKit是较新的,因此遗产较少。它也更干净、更快、记录更好。
Firefox 3的目标之一是清理代码库并简化它。据我所知,他们确实做到了这一点,但我不知道它与当前的WebKit迭代相比如何。对于谷歌来说,这显然还不够,因为他们在Firefox中拥有大量股份。
请参阅此处了解更多详细信息。
我有偏见,但如果你不介意使用(LGPL ed)Qt,那么使用QtWebKit呢?它很容易嵌入,当然是跨平台的,有一个很好的web浏览器演示,还有其他相关的例子。
这取决于您的需求。如果您只想显示普通的旧HTML,那么即使是Webkit也可能过于夸张。在我的一些应用程序中,我使用wxHTML。它是wxWidgets库中的一个组件(但不确定是否可以在没有wx的情况下使用它)。它很轻,只支持基本的HTML内容(下一个版本可能会提供一些CSS支持),并且有一个非常好的wxHtmlEasyPrinting控件,它提供了很好的打印预览,打印效果也很好。至于跨平台,wxWidgets可以在Windows、Linux、Mac和其他一些系统上工作,因此这肯定符合您的要求。
我不建议走壁虎路。集成它是可能的,但这比KHTML/Webkit要困难得多——这只是因为Gecko的构建没有考虑到嵌入。
我建议使用Safari/Chrome的WebKit引擎,该引擎源自Konqueror渲染引擎KHTML。
尝试选择Webkit,因为它被许多不同的浏览器(Konqueror、Safari和Google chrome)使用。这使得Webkit更加通用,更能适应其他需求。
Gecko的开发与Firefox密切相关。对Gecko所做的许多修改都是因为Firefox规定了它们。例如,Firefox3决定为了安全起见,将阻止所有自签名证书。实现已经在Gecko的引擎中完成,这意味着任何决定嵌入Gecko应用程序都会添加此安全约束。
如果你能继续使用Webkit,因为它主要是HTML页面的渲染引擎。这是为了在不同的网络浏览器中使用而开发的。而Gecko主要是单个浏览器的渲染引擎,它恰好提供了用于嵌入的API。
我的理解是Webkit非常好&比壁虎还小。Gecko最近应该进行了改造,这使其具有相当的可比性。
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在AVX通道中混洗的最佳方式
- 在C++中生成 HTML 输出的最佳方法是什么
- 什么是嵌入应用程序中的最佳HTML呈现引擎