使用GTK+ Webkit Webview(和Qt Webkit bridge)从JavaScript / HTML调用
Calling C++ from JavaScript / HTML using GTK+ Webkit Webview (and Qt WebKit bridge)
我目前正在评估从嵌入在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的一个很好的解决方案,但抱歉它不是免费的。
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 嘿,我正在尝试将此c ++转换为javascript,但有些东西不起作用
- C++中的 JavaScript 样式闭包
- OpenCV(C++)处理来自JavaScript / Web Assembly的图像数据
- 在C++中嵌入 Mozilla 的 JavaScript 引擎
- Javascript 找不到使用 emscripten 编译的导出 WASM 函数
- 在Javascript和C++中计算MD5哈希的不同结果
- 将Wiimote MAC地址转换为PIN码,从C++转换为Python或Javascript
- 如何使用EM_JS从带有参数的C++调用javascript方法
- JavaScript 中的一等函数和 C++ 中的函数声明
- 在 v8 JavaScript 中重复调用C++是否有巨大的开销?
- 在QtWebEngine中捕获JavaScript事件
- JavaScript箭头函数:我们能否像C ++ lambdas一样捕获值
- 我可以使用谷歌 v8 在回调函数中获取 JavaScript 函数C++源文本吗?
- QT WebKit桥:使用JavaScript调用C 功能
- 如何使用 WebKit 调用 JavaScript 中的C++函数
- 如何在 webkit 浏览器控件中返回指向 JavaScript 的 IDispatch 指针
- 使用GTK+ Webkit Webview(和Qt Webkit bridge)从JavaScript / HTML调用
- 如何在webkit上将匿名函数作为参数从javascript传递给c++