如何在 scalajs 中配置 boostrap 消毒器

How to configure the boostrap sanitizer in scalajs

我正在使用一个 bootstrap 弹出框,它的内容中包含一个 canvas 标签。我不知道为什么 canvas 标签没有出现,直到我遇到这个

所以我想我需要 运行 以下 javascript 代码:

$.fn.popover.Constructor.Default.whiteList.canvas = [];

如何在 scalajs 中执行此操作?

很简单:

import scala.scalajs.js

js.Dynamic.global.$.fn.popover.Constructor.Default.whiteList.canvas = js.Array()

我尝试使用:

js.Dynamic.global.$.fn.popover.Constructor.Default.whiteList.canvas = js.Array()

但是会导致下面的错误

TypeError: $g.$ is undefined

我想这与我使用的是 querki jquery-facade 有关。所以这让我找到了以下有效的解决方案:

    $.fn.asInstanceOf[js.Dictionary[js.Object]]("popover")
    .asInstanceOf[js.Dictionary[js.Object]]("Constructor")
    .asInstanceOf[js.Dictionary[js.Object]]("Default")
    .asInstanceOf[js.Dictionary[js.Object]]("whiteList")
    .asInstanceOf[js.Dictionary[js.Object]].put("canvas", js.Array())

我添加了以下隐含的class

implicit class ObjectEnhancer(obj: js.Object) {

    class DynamicDict(obj: js.Object) extends Dynamic {

        private val dict = obj.asInstanceOf[js.Dictionary[js.Object]]

        def selectDynamic(name: String) = new DynamicDict(dict(name))

        def updateDynamic(name: String)(value: js.Object) = dict.put(name, value)
    }

    def asDyn = new DynamicDict(obj)
}

这让我可以用更简洁的方式来写:

    $.fn.asDyn.popover.Constructor.Default.whiteList.canvas = js.Array()