Office.js displayDialogAsync 在 IE 上的 word online 中无法正常工作

Posted

技术标签:

【中文标题】Office.js displayDialogAsync 在 IE 上的 word online 中无法正常工作【英文标题】:Office.js displayDialogAsync not working correctly in word online on IE 【发布时间】:2018-07-02 07:58:51 【问题描述】:

我正在开发一个 word 网络插件,该插件在 office 2016/2013 和 chrome、edge 和 firefox 上的 word online 中大部分已完成并且运行良好。但是,我在 IE 11 上在线运行它时遇到问题。

用户使用 azure Active Directory 帐户登录应用程序,这是使用 Office.context.ui.displayDialogAsync 方法通过弹出窗口完成的。

正如我所说,这在任何地方都可以正常工作,除了 IE 上的 word online。

据我所知,问题是在 IE 上,在弹出窗口中它不被视为有效的办公环境,因此 office.js 未正确初始化。 Office.initialize 似乎从未被调用,如果手动初始化我的应用程序,则当弹出窗口尝试通过Office.context.ui.messageParent 与主窗口通信时出现错误,消息为:Unable to get property messageParent of undefined or null reference

另外支持这一点的是,当我使用OfficeHelpers.Utilities.host 检查主机类型时,在 chrome 或 edge 上的弹出窗口中显示“WORD”,在 IE 上显示“WEB”,这似乎意味着 Office.initialize 永远不会调用并且 Office.context.ui 为空?

如果我遗漏了什么或者这是 office.js 中的某种错误,谁能告诉我?

我尝试过使用https://appsforoffice.microsoft.com/lib/1/hosted/office.js 和最新的 npm 包中的 office js,两者都是一样的。

编辑:对displayDialogAsync 的工作原理进行了一些调查后,我可以看到,当它创建新窗口时,它会捕获当前上下文,例如Word|Web|16.00|EN-US|<some guid>。这似乎在任何地方都有效,但在 IE 中,但是在 IE 中简单地打开常规页面的对话框时它确实有效,但是当我们登录 AD 时,它必须转到 AD 登录页面然后重定向回来,这就是这个值出现的地方丢失(在 IE 中)。

【问题讨论】:

能分享一下在弹窗中初始化Office的代码吗? @RickKirkham 我不确定你的意思,我只是为 office init 函数分配一个方法,如下所示:Office.initialize = () => platformBrowserDynamic().bootstrapModule(AppModule); 但它从未被调用。 这就是我想看到的。因此,您正在对话框内引导您的应用程序的第二个实例。这原则上应该有效。您的 Office 365 域位于哪个 IE 安全区域? @RickKirkham 是的,我正在尝试,初始化函数从未在弹出窗口中调用(我相信这是因为它将环境视为 WEB) 【参考方案1】:

似乎我看到的特定问题(导航后状态未保留在 IE 中)是由于我的 Web 应用程序在本地运行并且 IE 将 localhost 视为与常规站点不同的安全区域(例如AD 登录页面),这导致状态在它们之间转换时丢失。

我通过取消选中 Intranet 下的这些框来使其正常工作(因此 localhost 属于常规 Internet 规则)

【讨论】:

以上是关于Office.js displayDialogAsync 在 IE 上的 word online 中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Office JS Api - 权限被拒绝问题

Office.js displayDialogAsync 在 IE 上的 word online 中无法正常工作

Office.js加载项不使用动态列

Office.js Word - window.external.RegisterEvent 不是函数

Word Office Js更新文档Word,压缩并检查