加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何直接在scala.js中嵌入JavaScript代码?

发布时间:2020-12-16 19:00:20 所属栏目:安全 来源:网络整理
导读:当我使用 scala.js来编写 scala代码来生成 javascript时,我发现很难将第三方 JavaScript代码包装到Scala对象中. 有没有直接嵌入一些JavaScript代码?例如作为字符串? 解决方法 不,没有,故意. “嵌入式”JavaScript代码中的标识符如何绑定到周围的Scala.js代
当我使用 scala.js来编写 scala代码来生成 javascript时,我发现很难将第三方 JavaScript代码包装到Scala对象中.

有没有直接嵌入一些JavaScript代码?例如作为字符串?

解决方法

不,没有,故意. “嵌入式”JavaScript代码中的标识符如何绑定到周围的Scala.js代码中的标识符?这绝对没有意义.

丑陋的解决方法:js.eval

显然,您可以将JavaScript代码作为参数嵌入到js.eval功能中.

import scala.scalajs.js

def foo(x: Int): Unit =
  js.eval("console.error('hello');")

但是js.eval总是在全局范围内评估(不在你调用它的范围内),所以这不工作:

def foo(x: Int): Unit =
  js.eval("console.error(x);") // x undefined here

好的解决方案:js.Dynamic

虽然您不能在Scala.js代码中嵌入任意JavaScript代码,您可以使用js.Dynamicjs.DynamicImplicits.通过这些,您通常可以使用“JavaScript语义”直接将JavaScript代码直接译成Scala语法(这非常接近JS语法):

import scala.scalajs.js
import js.DynamicImplicits._
import js.Dynamic.{global => g}

def foo(x: Int): Unit =
  g.console.error(x)

你甚至可以写这样的疯狂的JavaScript-ish代码:

if (g.console)
  (g.console.error || g.console.log).call(g.console,x)

例如,如果你想对控制台或console.error不够稳健.

这种方法的优点是标识符的正常绑定规则.而且你不用诉诸字符串来完成这项工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读