2013-05-14 73 views
4

我目前正在评估不同的方法/解决方案,以从嵌入在HTML页面中的JavaScript代码调用C++函数。该应用程序必须在Ubuntu Server 12.04 LTS上运行。使用GTK + Webkit Webview(和Qt WebKit桥接器)从JavaScript/HTML调用C++

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

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

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

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

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

当用Qt试用我的方法1时,有相当多的文档和样本可以做我想做的事情。但从方法2开始使用GTK +之后,我觉得比较慢。我个人认为,文档部分对于我正在尝试开发的那种应用程序来说并不那么简单。

其他途径:
我也想试试检查或者使用小程序(至.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++函数?

有人能指点我正确的方向吗?

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

问候。

+0

如果您使用的是Chrome,则可以使用本机客户端 http://stackoverflow.com/questions/1666957/is-there-any-way-to-use-c-in-chrome-extension – camino 2014-03-17 03:59:56

回答

2

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

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

+0

感谢你的回复。我的确了解了Thrift,并且尽可能多地使用它,因为它取决于Boost,所以我无法这样做。但我喜欢这种方法。 – aeon 2013-05-15 02:40:17

1

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等事件。您只需挖掘头文件并找到匹配的调用。

+0

感谢您的回复。你提到的第一种方法似乎很有趣。我想尝试一下,看看它是如何发展的。就第二种方法而言,我需要花一些时间来看看如何实现这一点。但是,再次感谢您的回答。 :-)如果你的方法有效,我会将其标记为答案。 – aeon 2013-05-15 02:44:00

0

最适合您的解决方案是G-XML是由GAMA一个很好的解决方案,但遗憾它不是免费的。

+0

什么使得这是最好的解决方案?什么事实可以让你做出这样的表述? – 2014-03-17 04:28:02

+0

还好,主要的事实是那么容易特意如果u掌握标记语言,该解决方案是与G-XML的IDE,你可以建立你的想法很容易,没有任何HTML代码,但结果代码是HTML + CSS + JavaScript,但你写在g-xml中,只有它看起来像wpf中的xaml; – 2014-03-19 15:51:01