从 Scala.js 呼叫 Javascript
Calling Javascript from Scala.js
我使用 Page.scala
启动 Scala.js 应用程序的客户端。因此 Page.scala
取代了 index.html。 Scalatags raw
函数允许包含实际的 JavaScript。在 Scalatags 文档中,示例是 alert('Hello!')。我实际上有一点 JavaScript 可以计算出浏览器是什么,但是说 "Hello!" 是一个很好的开始。 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)
)
)
}
脚本执行后,从 Scala.js 的角度来看,get_browser_info
就像任何 JavaScript 库一样。因此,您可以像这样以动态类型的方式调用它:
val browser = js.Dynamic.global.get_browser_info()
val name = browser.name.asInstanceOf[String]
val version = browser.version.asInstanceOf[String]
或者您可以定义一个您喜欢的静态类型门面。
我使用 Page.scala
启动 Scala.js 应用程序的客户端。因此 Page.scala
取代了 index.html。 Scalatags raw
函数允许包含实际的 JavaScript。在 Scalatags 文档中,示例是 alert('Hello!')。我实际上有一点 JavaScript 可以计算出浏览器是什么,但是说 "Hello!" 是一个很好的开始。 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)
)
)
}
脚本执行后,从 Scala.js 的角度来看,get_browser_info
就像任何 JavaScript 库一样。因此,您可以像这样以动态类型的方式调用它:
val browser = js.Dynamic.global.get_browser_info()
val name = browser.name.asInstanceOf[String]
val version = browser.version.asInstanceOf[String]
或者您可以定义一个您喜欢的静态类型门面。