如何在Scala.js中处理事件处理程序的供应商前缀?

时间:2017-02-02 14:02:34

标签: event-handling scala.js dom-events

org.scalajs.dom.experimental包含Fullscreen API的外观。目前的实现似乎是供应商的前缀,至少对于Chrome和Firefox而言。如何使用此外观与供应商前缀浏览器配合使用?

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是使用其规范名称对API进行填充,重定向到以供应商为前缀的版本。例如,在JavaScript文件中:

if (!Document.prototype.hasOwnProperty("fullscreenEnabled")) {
  if (Document.prototype.hasOwnProperty("webkitFullscreenEnabled"))
    Object.defineProperty(Document.prototype, "fullscreenEnabled", {
      get: function() { return this.webkitFullscreenEnabled; }
    }
  }
}

或者,在Scala.js中:

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

if (!g.Document.prototype.hasOwnProperty("fullscreenEnabled")) {
  if (g.Document.prototype.hasOwnProperty("webkitFullscreenEnabled"))
    js.Object.defineProperty(g.Document.prototype, "fullscreenEnabled", js.Dynamic.literal(
        get = { (thiz: js.Dynamic) => thiz.webkitFullscreenEnabled; }: js.ThisFunction
    )
  }
}