how to call JSNI function from Javascript function?
Asked Answered
Q

3

5

Here is caller button samples in html:

<input type='button' value='Call' onclick='Test()'>

And here are some functions I tried and which were not worked:

<script type="text/javascript">
    function Test() {
        com.tests.client.Test_GoogleWeb_JSNI::Callee()();
    }
</script>

But we are not able to call Callee().How we can achieve this?I mean how we can invoke JSNI function from javascript?

Help would be appreciated.

Quartersaw answered 14/2, 2012 at 12:40 Comment(1)
possible duplicate of How to call GWT java function from Javascript?Larimore
S
8

It's very easy. You need to "export" your function written in GWT (or it can be another JSNI) function.

Here is the relevant documentation: http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#calling

So in your case:

In your GWT code:

public static void Caller() /*-{ 
   ... 
}-*/

public static native void exportStaticMethod() /*-{
   $wnd.Callee =
      $entry(@com.tests.client.Test_GoogleWeb_JSNI::Callee());
}-*/;

Then you call exportStaticMethod() somewhere, even in your onModuleLoad. << YOU MUST DO THIS

Then you can call Callee() from your handwritten javascript code.

Your code for the button:

<input type='button' value='Call' onclick='$wnd.Callee();'>
Settee answered 14/2, 2012 at 13:19 Comment(2)
Yes i tried but i am not able to invoke the function when we click on the button.Quartersaw
Have a look I updated my answer to show what the code for your button should be. Also if the function is not being called, I recommend you bring up your browser console (F12 in Chrome) and have a look for any exceptions.Settee
D
1

For chrome, the above solution works if I change onclick='$wnd.Callee() to onclick='window.Callee(). Chrome's browser console tells us $wnd is not defined. $wnd is how to access the browser's window object in JSNI.

Sorry I couldn't just leave this as a comment (not enough points)

Divorcee answered 18/12, 2014 at 15:48 Comment(0)
G
0

See here:

  1. Make sure that Test_GoogleWeb_JSNI.Callee() is static.
  2. Assign the Callee()-function to the window object.
Genagenappe answered 14/2, 2012 at 13:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.