Scala.js:如何在Webworker中访问self

Ric*_*ver 2 scala.js

所以我有一个网络工作者:

package pWorker    
import scala.scalajs.js._
import org.scalajs.dom._

object WorkScript extends scala.scalajs.js.JSApp
{
  def main(): Unit =  
  {
    val x = 4
    val y = 8
    val z = x + y
    println("Worker x + y =" -- z.toString)      
  }
}
Run Code Online (Sandbox Code Playgroud)

从主JavaScript线程启动时,worker会根据需要打印到控制台.但我无法找到一种方法来称呼相应的:

self.addEventListener('message', function(e) {}
self.postMessage(e.data);
Run Code Online (Sandbox Code Playgroud)

我会从一个直接的Javascript文件调用.

sjr*_*jrd 5

与Scala.js一样,如果您没有找到JavaScript API的现有类型,您可以选择使用动态类型或编写自己的类型.

动态类型

val self = js.Dynamic.global
self.addEventListener("message", { (e: dom.MessageEvent) =>
  ...
}
self.postMessage(someData)
Run Code Online (Sandbox Code Playgroud)

静态类型

@js.native
object WorkerGlobal extends js.GlobalScope {
  def addEventListener(`type`: String, f: js.Function): Unit = js.native
  def postMessage(data: js.Any): Unit = js.native
}

WorkerGlobal.addEventListener("message", { (e: dom.MessageEvent) =>
  ...
}
WorkerGlobal.postMessage(someData)
Run Code Online (Sandbox Code Playgroud)