在html中访问由url导入的Javascript对象

时间:2017-09-27 02:21:06

标签: scala.js binding.scala

我正在编写一个嵌入式应用程序,我使用Office 365库来访问通过全局对象 Office

我已经编写了javascript应用程序,其中我在html页面中包含脚本URL,如下所示:

<script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>

我在ES6 javascript函数中访问上下文后如下:

 Office.initialize = function (reason) {
            $(document).ready(function () { 
                 Office.context.mailbox.addHandlerAsync(Office.EventType.ItemChanged, callbackfunction);
            });
        };

我想在scala JS中做同样的事情。

对于那个包含在html中的Office js库,如上所述。

尝试访问Office对象后:

@js.native
@JSGlobal
object Office extends js.Any {
  def initialize(f: String => Unit):js.Any = js.native
}

当我调用此Office对象时,它会抛出错误。

def callback = (reason:String) => {
  println(s"reason called in callback function => $reason")
}
Office.initialize(callback)

如何在scala JS中实例化和访问office对象?

错误:

VM3981 playground-fastopt-bundle.js:4078 Uncaught TypeError: $g.Office.initialize is not a function
    at HTMLDocument.<anonymous> (VM3981 playground-fastopt-bundle.js:4078)
    at mightThrow (VM4209 playground-fastopt-bundle.js:25770)
    at process (VM4209 playground-fastopt-bundle.js:25838)

初始化在Office对象中不可用。我们必须在运行时加载该函数。 错误讯息:

  

在Office.initialize函数中添加初始化代码。

代码的要点: Further Read

3 个答案:

答案 0 :(得分:0)

鉴于错误,似乎在您尝试调用它时尚未创建Office.initialize函数。 Office对象存在,但它没有字段initialize(或者它不是函数)。

这可能只是因为script代码的顺序不正确。确保在 Scala.js代码之前执行了定义Office.initialize的脚本

答案 1 :(得分:0)

我用以下方法解决了这个问题:

根据错误消息在Office.initialize函数上添加初始化代码,我必须定义一个属性来加载函数。

@js.native
@JSGlobal
object Office extends js.Object {
  var initialize:js.Function1[String, _] = js.native
}

加载上面的函数后:

Office.initialize = { r:String =>
        println(s"function initialized. reason => $r")
      }

这种方法类似于按钮点击的事件处理。

参考:https://github.com/scala-js/scala-js-dom/blob/5adf7290a4b1fdf7759dfed120e4050f87d9f0a2/src/main/scala/org/scalajs/dom/raw/Html.scala#L416

答案 2 :(得分:0)

我不确定

Office.initialize = { r:String =>
    println(s"function initialized. reason => $r")
  }

代码是否有效但是我写了一个小例子,它运作良好。 看看https://gist.github.com/abdheshkumar/f2ef0c73b942a8f5a48ec20559679105