gpt4 book ai didi

javascript - 使用 GTK+ Webkit Webview(和 Qt WebKit 桥)从 JavaScript/HTML 调用 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:54 34 4
gpt4 key购买 nike

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

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

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

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

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

方法二:使用 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 文件中)的接口(interface)部分。我应该寻找什么样的信号。如果我使用的是 WebkitWebview 控件,如何将按钮点击映射到 C++ 函数?

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

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

问候。

最佳答案

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

为了将 html View 与世界的 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 等事件。您只需挖掘头文件并找到匹配的调用。

关于javascript - 使用 GTK+ Webkit Webview(和 Qt WebKit 桥)从 JavaScript/HTML 调用 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16537318/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com