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 displayDialogAsync 在 IE 上的 word online 中无法正常工作