1

这是一个基本问题:

我有一个 Angular 2 应用程序,我正在尝试使用 Office 的对话框 API。基本上,我有一个路由https://domain/success想在对话框中打开。

更具体地说,这是我正在尝试的

我在路线https://domain/splash,它呈现了启动组件。

在 splashComponent.ts 中,我调用 this.microsoftService.doStuff

在 microsoftService,doStuff 方法中,我调用

Office.context.ui.displayDialogAsync('https://domain/success');

这应该呈现成功组件。

但是,我看到了启动组件。对话框的网址是

https://domain/success?_host_info=blahblah|isDialog|#/splash

为什么会这样?以及如何渲染成功组件?

4

1 回答 1

0

这是比解决方案更多的部分诊断,但评论有点过于复杂。

无论 Outlook 是否添加查询参数,您的路由器都会在 URL 的末尾添加“#/splash”,这就是它打开启动画面的原因。我认为问题出在路由配置和路由策略上。

与此相关的是,Office 对话框在一个完全独立的浏览器实例中打开,该浏览器实例具有完全独立的 JavaScript 引擎实例和执行上下文。因此,您的 Web 应用程序的完整第二个副本正在对话框中打开。这意味着将触发路由。

如果您决定在对话框中的 Web 应用程序中使用路由,那么您需要某种条件逻辑,应用程序测试它是否在对话框中打开并相应地路由。

也就是说,我建议在基于 Angular 的加载项中使用 Office Dialog API 时,偏离“单页”原则,只需创建一个在域中托管的 success.html 页面。这我更简单,更不容易出错。

顺便说一句,您不需要将自己的加载项域放在<AppsDomains>清单中。加载项信任自己和自己域中的任何内容。

有关详细信息,请参阅将 Office Dialog API 与单页应用程序和客户端路由一起使用,以及该文章的其余部分。

于 2018-10-17T21:10:58.720 回答