我无法让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版本,而是之前的版本),我很快就想检查一下你们是否知道如何实现它
答案 0 :(得分:1)
WebKitGTK版本1是单进程的,它使您可以侦听window-object-cleared
信号并将全局javascript上下文和add your javascript对象获取到全局上下文。
WebKitGTK版本2是多进程的,因此无法从与创建WebKitWebView对象相同的进程中获取全局javascript上下文,因为在另一个进程中对javascript进行了评估。为了extend Javascript,您必须为WebKitWebView实例WebKitWebExtension创建一个shared library(loads)。
当您调用webkit_web_view_run_javascript
时,它在您的情况下起作用的可能原因是,您的javascript对象仅在当前进程中创建和评估。