使用GTK+ Webkit Webview(和Qt Webkit bridge)从JavaScript / HTML调用

Calling C++ from JavaScript / HTML using GTK+ Webkit Webview (and Qt WebKit bridge)

本文关键字:Webkit JavaScript HTML 调用 Qt Webview GTK+ 使用 bridge      更新时间:2023-10-16

我目前正在评估从嵌入在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代码。Web页面和c++之间的接口是使用addToJavaScriptWindowObject()函数完成的。

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

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

当我用Qt尝试我的方法1时,有一组很好的文档和样本来做我想做的事情。但是在使用GTK+开始使用方法2之后,我感觉自己的速度相对较慢。我个人认为,对于我正在开发的应用程序来说,文档部分并不是那么直接。

其他方法:
我还想尝试检查是否使用applet(直接调用。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

我想知道如何确切地做调用一个c++函数的这个接口部分(在.so文件)当一个按钮被点击在包含JavaScript的HTML网页。我该找什么样的信号呢。如果我使用WebkitWebview控件,我如何映射一个按钮点击到一个c++函数?

谁能给我指个正确的方向?

我真的很感激你的时间和知识。

问候。

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

有一个例子

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

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

如果你需要在你的web应用程序中使用c++代码或本地应用程序,你可以尝试在c++代码上创建一个服务,并通过REST(例如)API访问它。

你可以使用一个通用的web应用程序框架(Spring/Java, Django/Python等)来开发你的web应用程序,并使用Apache Thrift来接口你的库。

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