4

我目前正在评估从嵌入在 HTML 页面中的 JavaScript 代码调用 C++ 函数的不同方法/解决方案。该应用程序必须在 Ubuntu Server 12.04 LTS 上运行。

我不是基于 Linux 的开发方面的专家。这是我第一次尝试在 JavaScript 和 C++ 代码之间进行接口。

C++ 代码基本上位于 .so 文件(动态库)中,这些文件将提供接口方法来访问某些硬件和文件系统。GUI 需要采用 HTML 格式,我正在寻找可以从 HTML 调用 C++ 的不同解决方案。我搜索并最终决定尝试两种方法,都使用 WebKit 引擎。

方法 1:使用 Qt 5.0.2 Webkit Bridge - WebView 控件
GUI 框架将位于 Qt 框架上,主应用程序窗口将包含一个 webview 控件,该控件将运行 HTML 代码,而 HTML 代码又包含 JavaScript 代码。
网页和 C++ 之间的接口是使用 addToJavaScriptWindowObject() 函数完成的。

我创建了一个示例应用程序并测试了这个解决方案,它似乎工作正常。

方法 2:使用 GTK+ WebKit WebView
我下载并安装了 GTK 3.0 库。
我得到了 webkitgtk 2.0.1 并安装了它。
我用 GTK 创建了一个没有 webkit 的测试应用程序,它运行良好。
我正在尝试使用 GTK 创建一个 webkit webview 控件。

在使用 Qt 尝试我的方法 1 时,有相当多的文档和示例可以做我想做的事情。但是在开始使用 GTK+ 的方法 2 之后,我觉得相对而言移动速度较慢。我个人觉得对于我正在尝试开发的那种应用程序来说,文档部分并不是那么直接。

其他方法:
我还想尝试检查使用 Applets(直接调用 .so 文件)或使用 V8 JavaScript 引擎在 JavaScript 和 C++ 之间进行接口是否可行(https://code.google.com/p /v8/ )

我尝试了以下资源:
http://webkitgtk.org/
http://www.webkit.org/
https://live.gnome.org/WebKitGtk/ProgrammingGuide/Tutorial

我想知道当在包含 JavaScript 的 HTML 网页中单击按钮时,如何准确地执行调用 C++ 函数(在 .so 文件中)的接口部分。我应该寻找什么样的信号。如果我使用的是 WebkitWebview 控件,如何将按钮单击映射到 c++ 函数?

有人可以指出我正确的方向吗?

我非常感谢您的时间和知识。

问候。

4

3 回答 3

2

Webkit GTK 2 在 API 方面发生了显着变化。所以我不确定这是否适用于 Webkit GTK 2。但这肯定适用于 Webkit GTK 1.* 版本。对QT一无所知。

对于将 html 视图与世界的 C/C++ 端连接的需要,您可以使用两种方法。请看一下函数 webkit_dom_event_target_add_event_listener。https://live.gnome.org/WebKitGtk/ProgrammingGuide/Cookbook有示例

您可以采取的另一种方法是在单击按钮时使用警报并发送字符串作为信息。在 C 端,您可以连接警报侦听器并解析消息并决定需要做什么。我已经在 python 中编写了很多采用这种方法的代码,因为上面提到的调用没有暴露给 python。

我同意 webkit gtk 的文档有点稀疏。但是,如果您知道如何在 javascript 中完成某些事情,通常您可以将 javascript DOM 管理和事件调用映射到 C 端。这包括动态生成元素,管理诸如 onclick 等事件。您只需要挖掘头文件并找到匹配的调用。

于 2013-05-14T17:59:49.410 回答
1

如果您需要在 Web 应用程序中使用 C++ 代码或本机应用程序,您可以尝试通过 C++ 代码创建服务并通过 REST(例如)API 访问它。

您可以使用通用 Web 应用程序框架(Spring/Java、Django/Python 等)来开发您的 Web 应用程序并使用Apache Thrift来连接您的库。

于 2013-05-14T07:55:25.893 回答
-1

最适合您的解决方案是 g-xml,它是 GAMA 的一个很好的解决方案,但很抱歉它不是免费的。

于 2014-03-17T03:47:58.010 回答