WebKit2Gtk中的JavaScriptCore与C?

问题描述 投票:4回答:1

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

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

我在load回调中编写了这段代码:

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版本,而是之前的版本),我很快就想检查一下你们是否知道如何实现它。

javascript c webkit gtk webkit2
1个回答
1
投票

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

WebKitGTK版本2是多进程的,因此从您创建WebKitWebView对象的同一进程获取全局javascript上下文将不再有效,因为在另一个进程中评估了javascript。为了extend Javascript你必须创建一个你的WebKitWebView实例WebKitWebExtensionshared libraryloads)。

当你调用webkit_web_view_run_javascript时,为什么它在你的情况下工作的可能原因是你的javascript对象只是在当前进程中创建和评估。

© www.soinside.com 2019 - 2024. All rights reserved.