"Word object is undefined" 在登录重定向后的 Office 2016 加载项中

"Word object is undefined" in Office 2016 add-in after login redirection

我正在尝试添加一个词,首先必须在初始加载后重定向到登录页面,并在登录后重定向回加载项。加载项托管在自己的 Web 服务器上。但是,在重定向之后,我得到一个 "Word is undefined" 的错误。加载项在 word 中 运行ning,我调用了 Office.initialize 和 Word.run。如果我 运行 加载项使其指向本地主机,而不是加载项的 Web 服务器,它 运行 没问题,但是当它 运行 来自 Web 服务器时我得到了错误。

对于出现错误的页面,我的代码如下所示:

(function () {
"use strict";

Office.initialize = function (reason) {
    $(document).ready(function () {

        try {
            doSomethingInWord();
        } catch (e) {
            console.log(e);
        }
    }
}
})();

我的 "doSomethingInWord" 函数如下所示:

function doSomethingInWord() {
    Word.run(function (context) {
        var body = context.document.body;

        return context.sync()
            .then(function () {
                    body.clear();
                    return context.sync().then(function () {
                        console.log('Did Something in word');
                    })
        }).catch(errorHandler);
    }
}

我认为您遇到的问题是,通过重定向到身份验证对话框并返回,您不会以某种方式重新触发 Office.js。

我很惊讶你说它在没有 Visual Studio 的情况下也适用于 Word -- 我不知道它们之间有何关联。但无论哪种情况,我认为您都会 运行 进入此流程中的其他问题,尤其是在 Excel Online 中,其中加载项 运行s 在 iframe(以及 OAuth 对话框往往不允许出现在 iframes).

中的地方

我认为最好的办法是加载加载项 "normally",并使用 Office.context.ui.displayDialogAsync API 在单独的对话框中显示 OAuth 登录。在此期间,让您的加载项显示 "waiting on dialog input for login"。然后,在 OAuth 登录完成后将对话消息返回父级,传递任何必需的信息(令牌或诸如此类)。