Hi,

On Tue, Sep 12, 2017 at 9:29 AM, Ludovic Brenta <[email protected]> wrote:
Hello,

I am extending a multi-million-line-of-code application written
in Ada with a new WebKitGTK browser window, using the WebKit2GTK
API.

After reading [1]  and [2] I am trying to expose an Ada (or C,
C++, Vala, whatever) subprogram to the JavaScript engine in
WebKit, so that JavaScript code can call it.

[1] http://www.davedoesdev.com/wrapping-webkit-part-1-gtk+-vala/
[2] https://karhm.com/JavaScriptCore_C_API/

This first blog post is very old and a trap (see below). The second one might be useful, but notice the warning that it has omitted memory management and error handling....

The gist of it is: attach a callback to the "load-changed" signal
of the WebKitWebView. If the Load_Event is "finished", create a
new function object (by calling JSObjectMakeFunctionWithCallback);
add to the global object of the WebView a new property whose name
is the name of the function as seen from JavaScript and the value
is the function object.

This is your problem, because in WebKit2 the JSC API is not really useful in the UI process. You want to use it in the web process instead. See [1] for some documentation of how to write a web extension. You basically compile your web process code into a shared object that will be dlopened by the web process at runtime. Then you can communicate between the web process and the UI process using any form of IPC you prefer (we recommend D-Bus). It's a lot of work to set up, unfortunately, but the advantage is your whole application does not crash when the web process crashes.

[1] https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html
If I try to call the function thus exported (and aptly named
"exported"), the JavaScript engine throws:

 ReferenceError: Can't find variable: exported

I am suspecting that I'm attaching the property to the wrong
global object.  Since I'm stuck with Red Hat Enterprise Linux
and the webkitgtk3-devel-2.4.9-6.el7.x86_64 package, I have no
debugging info available for WebKit itself (only for the host
application), so I can't easily debug what's happening.

Surely there should be debuginfo available... do you not see any results from 'debuginfo-install webkitgtk3'?

  All I
can tell for sure is that Get_Javascript_Global_Context,
Get_Global_Object, String.To_JavaScript etc all return non-null
and that Exceptions remain null after the call to Set_Property.
Am I doing something wrong?  Is this feature even supported with
WebKit2 or should I switch to the deprecated WebKit 1 that does not
use a separate process?

You should definitely not use the WebKit1 API, unless you are content to target RHEL 7 forever.

Good luck,

Michael

_______________________________________________
webkit-gtk mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-gtk

Reply via email to