Office 网络加载项:Office.initialize() 函数

Office web add-in : Office.initialize() function

我很难理解,但找不到与我想要实现的目标完全匹配的示例。它有一个 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 是否正确?

抱歉,如果这看起来很基本,但所有演示和文档似乎都接近我想要的,但不完全是。节日快乐!

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() 是一种异步方法,returns Promise 对象同时检查Office.js 库是否已完全加载。

示例:

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 一次。