On 1 November 2017 at 05:43, <philip.chime...@gmail.com> wrote:

> On Thu, Oct 12, 2017 at 5:23 AM Andrea Giammarchi <
> andrea.giammar...@gmail.com> wrote:
>
>> FWIW I've used the location with a private channel as protocol to
>> intercept calls to/from the page and GJS.
>>
>> https://github.com/WebReflection/jsgtk-twitter/blob/master/app#L162-L175
>>
>> The channel is a random string: https://github.com/
>> WebReflection/jsgtk-twitter/blob/master/app#L59
>>
>> From the page, which is aware of the "secret" channel, I call GJS actions
>> via location.href = `secret1234:method(${encodeURIComponent(JSON.
>> stringify(value))})`;
>>
>> The protocol secret1234 is intercepted and the
>> `controller.method(JSON.parse(decodeURIComponent(restOfURI)))` invoked.
>>
>> To signal the page everything is fine I use this.webView.runJavaScript
>> https://github.com/WebReflection/jsgtk-twitter/blob/master/app#L377
>>
>> The page has a listener for the `secret1234` event on the main window,
>> and such listener is instrumented to react accordingly with the CustomEvent
>> .detail payload/info.
>>
>> This might look a bit convoluted, and it has JSON serialization as
>> limitation for the kind of data you want to pass (i.e. I use base64 encoded
>> images as source from remotely fetched files enabling somehow CORS for
>> whatever I want) but it worked well, circumventing the missing
>> communication channel available in Qt.
>>
>> Maybe today there are better ways for doing a similar thing and if that's
>> the case, please share.
>>
>
> Here is another, fairly new, way to do it. Start out by registering a
> "script message handler":
> http://devdocs.baznga.org/webkit240~4.0_api/webkit2.
> usercontentmanager#method-register_script_message_handler
>
> To send a message to the page, use the same thing that Andrea uses:
> http://devdocs.baznga.org/webkit240~4.0_api/webkit2.
> webview#method-run_javascript
>
> To send a message from the page to the GJS program, use the postMessage()
> method mentioned in the documentation, and connect to this signal in your
> GJS program to receive the message:
> http://devdocs.baznga.org/webkit240~4.0_api/webkit2.
> usercontentmanager#signal-script-message-received
>
>
Excellent - I had not noticed this. My first attempt at communicating
between WebKit2 and GJS was via setting "document.title" and having GJS
connect to the "notify::title" signal! Not a great approach, this looks
much better.


> Although I just realized that unfortunately the values won't be able to be
> marshalled into GJS since you need to use the JavaScriptCore API to get at
> them. This is a really nice method in C, but in JS you can only use it to
> send a message without any content. That is annoying. I should probably
> open up an issue about this.
>
>
I just hit upon this problem myself. In researching it, I found it is
solved (at least well enough for my use-case) with this open source library:

https://github.com/saifulbkhan/wkjscore-result

It's awkward having another dependency for me, especially one that isn't in
a normal Ubuntu/Fedora/etc. package, but otherwise this approach worked
fine for me.


> On Wed, Oct 11, 2017 at 12:57 PM, Adriano Patrizio <
>> adriano.patri...@hotmail.com> wrote:
>>
>>> Thank you for response, this is my problem: have necessity to implement
>>> methods into my web application webkit2 based and comunicate with GJS
>>> script (example: filesystem functions to read and write files or window
>>> managment).
>>>
>>
> Regards,
> Philip C
>
> _______________________________________________
> javascript-list mailing list
> javascript-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/javascript-list
>
>
_______________________________________________
javascript-list mailing list
javascript-list@gnome.org
https://mail.gnome.org/mailman/listinfo/javascript-list

Reply via email to