trait JSEnv extends AnyRef
A JavaScript execution environment.
This can run and interact with JavaScript code.
Any implementation is expected to be fully thread-safe.
- Alphabetic
- By Inheritance
- JSEnv
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract val name: String
Human-readable name for this JSEnv
- abstract def start(input: Seq[Input], config: RunConfig): JSRun
Starts a new (asynchronous) JS run.
Starts a new (asynchronous) JS run.
This may only throw if value of
inputis unknown orconfigcannot be supported. To verify whether a RunConfig can be supported in a forward compatible manner (i.e. when new options are added in later versions) implementations of JSEnvs must use RunConfig.Validator.This must not throw if the run cannot be started or there is a problem with the input's content (e.g. file does not exist, syntax error, etc.). In this case, JSRun#future should be failed instead.
- Exceptions thrown
UnsupportedInputExceptionif the value ofinputcannot be supported.java.lang.IllegalArgumentExceptionif the value ofconfigcannot be supported.
- abstract def startWithCom(input: Seq[Input], config: RunConfig, onMessage: (String) => Unit): JSComRun
Like start, but initializes a communication channel.
Like start, but initializes a communication channel.
Inside the VM this is to provide a global JavaScript object named
scalajsComthat can be used to interact with the message channel. Its operations are:// initialize com (with callback). May only be called once. scalajsCom.init(function(msg) { console.log("Received: " + msg); }); // send a message to host system scalajsCom.send("my message");
All messages, sent in both directions, must be valid UTF-16 strings, i.e., they must not contain any unpaired surrogate character. The behavior of a communication channel is unspecified if this requirement is not met.
We describe the expected message delivery guarantees by denoting the transmitter as
tand the receiver asr. Both the JVM and the JS end act once as a transmitter and once as a receiver. These two transmitter/receiver pairs (JS/JVM and JVM/JS) are independent.For a pair
(t,r):- If
tcalls JSComRun#send exactly in the sequence
send(m_1), ..., send(m_n)
and
robservesonMessage(m_k)(k <= n) but notonMessage(m_{k+1}),rmust observeonMessage(m_1), ..., onMessage(m_k)
exactly in this order.
- If
tandrkeep running indefinitely andtsends n messages,rreceives n messages.
- onMessage
Callback invoked each time a message is received from the JS VM. The implementation may not call this anymore once JSRun#future of the returned JSComRun is completed. Further, JSRun#future may only complete with no callback in-flight.
- If
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()