2015-07-22 135 views
3

我使用Page.scala来启动Scala.js应用程序的客户端。因此Page.scala取代了index.html。 Scalatags raw函数允许包含实际的JavaScript。在Scalatags文档中,示例是alert('Hello!')。我确实有一点JavaScript可以解决浏览器的问题,但是会说“你好!”一开始就很好。 JavaScript本身是get_browser_info()函数here从Scala.js调用Javascript

所以我的问题是,我可以从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) 
    ) 
    ) 
} 

回答

4

一旦脚本执行,该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] 

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