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