@ scala.js 1.0中的@JSGlobalScope(JavaScriptException,ReferenceError,未定义var)

问题描述 投票:2回答:1

从scala.js 0.6.x迁移到1.0之后,我发现一些与@JSGlobalScope相关的代码已损坏。

我的用例是这样的:

  • 有一个第三方库,希望将某些全局变量设置为函数
  • 在加载并准备就绪时,将调用此函数(按名称)
  • 我从scala.js在全局范围内设置了此功能

代码看起来像这样:

  @js.native
  @JSGlobalScope
  object Globals extends js.Object {
    var callbackFunctionFor3rdPartyLib: js.Function0[Unit] = js.native
  }

然后我像这样设置此变量:

Globals.callbackFunctionFor3rdPartyLib = () => {
   // do things
}

然后将脚本添加到DOM。

这与scala.js 0.6.x一起使用,但与1.0一起出现了如下异常:

scala.scalajs.js.JavaScriptException: ReferenceError: callbackFunctionFor3rdPartyLib is not defined

changelog for 1.0.0中,有一个“重大更改”部分提到了这一点:

访问未声明的成员将导致引发ReferenceError...

js.Dynamic.global.globalVarThatDoesNotExist = 42

先前将创建所述全局变量。在Scala.js 1.x中,它还会引发ReferenceError。

我的问题是:

在scala.js 1.0中执行这样的操作(创建新的全局变量)的正确方法是什么?>>

从scala.js 0.6.x迁移到1.0后,我发现了与@JSGlobalScope相关的一些代码。我的用例是这样的:有一个第三方库,希望将某些全局变量设置为...

scala scala.js
1个回答
0
投票

[如果知道您将始终处于浏览器上下文中,则可以在@JSGlobal("window")上使用@JSGlobalScope而不是Globals,这等同于在JS中执行window.myGlobalVarFor3rdPartyLib。这样就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.