How to run JavaScript function from GWT Java with JSNI?
You answered your question yourself. There is no better way for a very simple reason: there are multiple ways to deploy GWT app, running in iframe is only one of the options. So that's why you have to use $wnd variable to access external JS function, so in case if you switch the linker , your still code will work just fine.
Dims
Software developer & Machine Learning engineer C/C++/Java/C#/Python/Mathematica/MATLAB/Kotlin/R/PHP/JavaScript/SQL/HTML/ LinkedIn: http://www.linkedin.com/in/dimskraft Telegram: https://t.me/dims12 I prefer fishing rod over fish.
Updated on June 26, 2022Comments
-
Dims almost 2 years
Can't understand from the manual: how actually to run JS function from Java?
For example, I have a function in my html page:
<script type="text/javascript" language="javascript"> function foo() { alert('Foo!'); } </script>
The following module shows two buttons, only second of which works:
public class Test_GoogleWeb_JSNI_01 implements EntryPoint { public void onModuleLoad() { Button fooButton = new Button("Foo!"); fooButton.addClickHandler(new ClickHandler(){ public void onClick(ClickEvent event) { fooRunner(); }; }); HTML fooButtonNative = new HTML(); fooButtonNative.setHTML("<input type='button' value='Foo Native' onclick='foo()'>"); RootPanel rootPanel = RootPanel.get(); rootPanel.add(fooButton); rootPanel.add(fooButtonNative); } public static native void fooRunner() /*-{ foo(); }-*/; }
It is said in manual, that native functions implemented within nested frame, which explains the situation. But how to run JS functions then?
UPDATE 1 The following works.
Java:
public static native void fooRunner() /*-{ $doc.fooRunner(); }-*/;
JS:
<script type="text/javascript" language="javascript"> document.fooRunner = function foo() { alert('Foo!'); } </script>
Is there a better way?
-
chelo_c over 8 yearscan you call a javascrypt method that returns an object? and use that object?