Office Web加载项:Office.initialize()函数

时间:2018-12-26 11:47:32

标签: ms-office outlook-web-addins

我正在努力理解,并且没有找到与我要实现的目标完全匹配的示例。带有一个MS Outlook功能区图标,单击该图标将显示一个“对话框”。我玩了一个演示,扔掉了多余的功能,并加入了Hello World-但它是JQuery,我想使用AngularJs来重用许多现有应用程序。

首先,该示例表明所有似乎都有类似的东西

    <DesktopFormFactor>
      <FunctionFile resid="functionFile" />

这似乎是当用户单击功能区栏上的图标时调用的功能。如果我只是使用<script src=>标记来包含这样的函数文件,我会假设我不需要吗?

我的应用只有一个视图,因此在演示中,所有*.js文件都具有类似的内容

// The Office initialize function must be run each time a new page is loaded
Office.initialize = function (reason) {

我能正确地假设我只需要在自己的视图控制器中拥有这样的调用吗?

抱歉,这似乎很基础,但是所有演示和文档似乎都接近我想要的内容,但不完全相同。节日快乐!

1 个答案:

答案 0 :(得分:2)

使用FunctionFile

FunctionFile指定用于加载项通过执行JavaScript功能而不显示UI的加载项命令(功能区按钮)公开的操作的源代码文件。 加载项可以决定在任务窗格中显示一些UI或在后台执行javascript函数。对于UI-less add-ins,您将必须指定一个FunctionFile。

在您的情况下,FunctionFile可以忽略。

使用Office.initialize

Office加载项包括Office.js库,并且该库希望您的启动代码在库完全加载之前不调用任何API。您的代码可以通过两种方式来确保库已加载。

  1. 使用Office.initialize:Office.js库已完全加载并准备好与用户进行交互时,会触发初始化事件。您可以为其分配处理程序。
  2. 使用Office.onReady:Office.onReady()是一种异步方法,它在检查Office.js库是否已完全加载时返回Promise对象。

示例:

Office.initialize = function () {
    // Office is ready
};

Office.onReady(function(info) {
    if (info.host === Office.HostType.Outlook) {
        // Based on host, decide what to display.
    }
    if (info.platform === Office.PlatformType.PC) {
        // Make minor UI changes, if required.
    }
});

根据您的情况,您可以使用一次initialize / onReady。