2015-07-22 129 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] 

或者你可以定義一個你喜歡的靜態類型的門面。