Package org.teavm.jso
JSO is a specification that describes how Java platform can interact with JavaScript code. There are two parts of this specification: JSO core, that defines mapping between Java and JavaScript objects and JSO APIs, that define Java wrappers around various JavaScript and HTML5 APIs. The latter part is simply application of the former one. JSO implementor must implement only the first part, and it may ignore the second part, since it should work properly this way. However, it may implement some of the APIs itself in some cases, for example to improve performance.
The first part of JSO is directly in this package. All subpackages declare the second part of JSO.
JSO does not do anything itself. It is only a set of interfaces that define interaction. To use JSO in your application, you should include one of its implementations, that may exist for different platforms, such as JVM, RoboVM, Android, TeaVM or bck2brwsr.
JSBody annotation
The easiest way to invoke JavaScript code from Java is to define native method marked with the
JSBody
annotation that contains the JavaScript code.
Example:
@JSBody(params = { "message" }, script = "window.alert(message);") public static native void alert(String message);
Overlay types
Often you need to pass complex values between Java and JavaScript. Primitives are usually insufficient for
this purposed. JSO comes with concept of overlay types, that are usable from both Java and JavaScript.
For detailed description, see JSObject
interface.
When wrapping JavaScript APIs in Java classes, you usually write boilerplate JSBody
like
this:
@JSBody(params = "newChild", script = "return this.appendChild(newChild);") Node appendChild(Node newChild);
JSO offers shortcut annotations that help to avoid such boilerplate. They are: JSMethod
,
JSProperty
, JSIndexer
.
-
Interface Summary
-
Class Summary
-
Annotation Types SummaryAnnotation TypeDescriptionIndicates that method is to have native JavaScript implementation.Marks parameters of JavaScript methods that should be passed by reference.Marks abstract member method either as an getter indexer or setter indexer.Marks abstract member method as a JavaScript method.Marks abstract member method as either a getter or a setter.