WebKit2Gtk中的JavaScriptCore与C?

时间:2017-01-26 19:55:29

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

1 个答案:

答案 0 :(得分:1)

WebKitGTK版本1是单进程的,它使您可以侦听window-object-cleared信号并将全局javascript上下文和add your javascript对象获取到全局上下文。

WebKitGTK版本2是多进程的,因此无法从与创建WebKitWebView对象相同的进程中获取全局javascript上下文,因为在另一个进程中对javascript进行了评估。为了extend Javascript,您必须为WebKitWebView实例WebKitWebExtension创建一个shared libraryloads)。

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