使用 C 的 WebKit2Gtk 中的 JavaScriptCore?

标签 javascript c webkit gtk webkit2

我无法让 JavaScriptCore 与 WebKit2Gtk 一起工作。在我的 C 应用程序中,我使用 WebKit2Gtk 作为我的应用程序的前端,我希望它能够访问 C 函数。

WebKitGtk(不是 WebKit2 版本)有几个例子。然而在邮件列表中有一些信息表明 WebKit2Gtk 的线程性质,它更复杂。不幸的是我没有找到任何例子。

我在加载回调中写了这段代码:

JSGlobalContextRef jsContext = webkit_web_view_get_javascript_global_context
                                           (WEBKIT_WEB_VIEW(gtk_webview));

JSEvaluateScript(jsContext,JSStringCreateWithUTF8CString
                      ("$('#debuginfo').html('JS API OK')"),0,0,0,0);

不幸的是,WebKit2Gtk 中绝对没有发生任何事情。但是,如果我使用 API 文档中定义的新函数并执行以下命令,我将获得所需的输出。

webkit_web_view_run_javascript(WEBKIT_WEB_VIEW(gtk_webview),
                "$('#debuginfo').html('JS API OK')",NULL,NULL,NULL);

带有 run-javascript-function 的新 API 可以快速执行 JS 代码,但我想让 WebKit2Gtk 中的 JS 代码执行我可以在 C 代码中处理的 JS 函数。

期待您的帮助,因为我有点被这件事困住了,在恢复到 WebKitGtk(不是 WebKit2Gtk 版本,而是以前的版本)之前,我想快速检查一下你们是否知道如何实现它.

最佳答案

WebKitGTK 版本 1 是单进程的,它允许您收听 window-object-cleared发出信号并获取全局 javascript 上下文和 add your javascript 对象到全局上下文。

WebKitGTK 版本 2 是多进程的,因此从创建 WebKitWebView 对象的同一进程获取全局 javascript 上下文将不再有效,因为 javascript 是在另一个进程中计算的。为了extend Javascript你必须创建一个 WebKitWebExtension ( shared library ) 你的 WebKitWebView 实例 loads .

当您调用 webkit_web_view_run_javascript 时它在您的情况下起作用的可能原因是您的 javascript 对象仅在当前进程中创建和评估。

关于使用 C 的 WebKit2Gtk 中的 JavaScriptCore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41881844/

相关文章:

swift - 如何显示 webkit 所在的当前 URL

Javascript/HTML,是否可以从循环中创建变量名

javascript - 如何在网页中使用 div 模拟窗口之间的 alt-tab 键?

C 控制流,内存分配 : Abort trap 6, 用字符串中的字符填充数组,嵌套 for 循环

c - XCode - 导入 Sedna 库

javascript - 如何使用 JS 删除或重置 CSS 样式?

javascript - 提交表单后如何检查数据库中存在的文本框值

javascript - 使用 Javascript 从 SOAP 中提取数据

C:for 循环与 scanf 的行为真的很奇怪

c - 如何关闭右键单击上下文菜单