我无法让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版本,而是之前的版本),我很快就想检查一下你们是否知道如何实现它。
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对象只是在当前进程中创建和评估。