"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 登录完成后将对话消息返回父级,传递任何必需的信息(令牌或诸如此类)。
我正在尝试添加一个词,首先必须在初始加载后重定向到登录页面,并在登录后重定向回加载项。加载项托管在自己的 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 登录完成后将对话消息返回父级,传递任何必需的信息(令牌或诸如此类)。