登录重定向后 Office 2016 加载项中的“Word 对象未定义”

Posted

技术标签:

【中文标题】登录重定向后 Office 2016 加载项中的“Word 对象未定义”【英文标题】:"Word object is undefined" in Office 2016 add-in after login redirection 【发布时间】:2016-11-23 20:39:18 【问题描述】:

我正在尝试添加一个单词,首先必须在初始加载后重定向到登录页面,登录后重定向回加载项。加载项托管在其自己的 Web 服务器上。但是,重定向后,我收到“Word 未定义”的错误消息。插件在 word 中运行,我调用了 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.context.requirements.isSetSupported('WordApi', 1.1) 返回 true。 好的,这个错误似乎只在我从 Visual Studio 运行插件时发生。只用 word 运行它似乎没有问题。 您能详细介绍一下这个登录服务吗?它会重定向到不同的页面,然后返回到这个页面吗?它怎么知道回到这个(查询参数与浏览器返回)?服务是否在同一个域上运行?... 当然,它会从插件页面重定向到联合权限以使用 OAuth 登录,然后使用我传递给插件服务器的一些查询参数重定向回插件页面以访问受限内容.登录页面位于不同的域中。 【参考方案1】:

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

我很惊讶你说它在没有 Visual Studio 的情况下在 Word 中也能工作——我不知道它们是如何相关的。但无论哪种情况,我认为您都会在此流程中遇到其他问题,尤其是在 Excel Online 中,加载项在 iframe 中运行(并且 OAuth 对话框往往不允许在 iframes 中运行) .

我认为您最好的选择是“正常”加载加载项,并使用 Office.context.ui.displayDialogAsync API 在单独的对话框中显示 OAuth 登录。在此期间,让您的加载项显示“等待登录对话框输入”。然后,在 OAuth 登录完成后将对话消息返回给父级,并传入任何所需的信息(令牌或其他)。

【讨论】:

似乎显示对话框的功能现在称为“displayDialogAsync” - Office Dev 我是凭记忆写的……是的,我的意思是 displayDialogAsync。感谢您的编辑。 有什么方法可以将模型传递给对话框吗? @KhawajaAsim ,我建议您将其作为一个单独的问题提出,并提供更多详细信息 @MichaelZlatkovsky 你去***.com/q/42572554/5955233

以上是关于登录重定向后 Office 2016 加载项中的“Word 对象未定义”的主要内容,如果未能解决你的问题,请参考以下文章

Word 加载项中的绑定用法

office插件安装完成后com加载项中vsto文件不加载

登录到网站后,它会根据检查“网络”重定向到正确的页面,但是会注销并重新加载登录页面

身份验证重定向失败

由于 Laravel 4 中的页脚 html 代码,页面在登录页面上再次重定向

重定向后反应状态数据未准备好