【问题标题】:Calling Javascript from Scala.js从 Scala.js 调用 Javascript
【发布时间】:2015-07-22 20:24:46
【问题描述】:

我使用Page.scala 来启动 Scala.js 应用程序的客户端。因此Page.scala 替换了 index.html。 Scalatags raw 函数允许包含实际的 JavaScript。在 Scalatags 文档中,示例是 alert('Hello!')。实际上,我有一点 JavaScript 可以计算出浏览器是什么,但会说“你好!”是一个很好的开始。 JavaScript 本身就是get_browser_info() 函数here

所以我的问题是,我可以在 Scala 代码中调用这个小 JavaScript 吗?这是发现用户正在使用的浏览器的明智方式吗?我想将此信息发送回服务器。

当然我可以将函数翻译成 Scala,但是检查浏览器的 JavaScript 对我来说并不容易阅读——我从来都不是 JavaScript 程序员。

翻译会很棒,即使它几乎只能回答核心问题。

编辑 @sjrd 从启动 Scala 代码中给出了答案。为了给出完整的画面,这是 Page.scala 的样子:

object Page{
  val boot =
    "simple.MyScalaClient().main(document.getElementById('contents'))"
  val browserVersionFn = "<script>function get_browser_info(){var ua=navigator.userAgent ... version: M[1]};}</script>"
  val skeleton =
    html(
      head(
        meta(charset:="utf-8"),
        script(src:= "/myappname/myappname-fastopt.js"),
        link(
          rel:="stylesheet",
          href:="http://yui.yahooapis.com/pure/0.5.0/pure-min.css"
        )
      ),
      body(
        style := "margin:30",
        onload := boot,
        div(id:="contents"),
        raw(browserVersionFn)
      )
    )
}

【问题讨论】:

    标签: javascript scala.js


    【解决方案1】:

    脚本执行后,get_browser_info 就像任何 JavaScript 库一样,从 Scala.js 的角度来看。因此,您可以像这样以动态类型的方式调用它:

    val browser = js.Dynamic.global.get_browser_info()
    val name = browser.name.asInstanceOf[String]
    val version = browser.version.asInstanceOf[String]
    

    或者你可以定义一个你喜欢的静态类型外观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 2023-03-29
      • 1970-01-01
      • 2014-03-31
      • 2015-12-22
      • 1970-01-01
      相关资源
      最近更新 更多