0

我目前正在构建一个 Web 应用程序,它既可以作为独立版本在浏览器中加载,也可以作为 Outlook 加载项加载。为了利用 Outlook 环境,我将 office.js 加载到我的 Web 应用程序的布局中。我想检查 web 应用程序是在 Outlook 中加载(作为加载项)还是作为浏览器中的 web 应用程序加载,以便我可以有条件地隐藏需要该应用程序在 Outlook 中运行的功能。

根据关于该主题的现有问题(在此处找到:检查 Office.js 是否在 Office 客户端之外加载)office-js-helpers 通过使用

OfficeHelpers.Utilities.host

这将根据上下文返回“outlook”或未定义,这正是我正在寻找的(需要注意的是,您首先加载 office.js,然后再加载另一个脚本以检查是否确实需要 office.js)。不幸的是,我必须支持旧版本的 Outlook,即使在 Outlook 中加载上述解决方案也会返回 undefined(比最新版本晚 2 年 - 看不到任何变化)。

有趣的是,office.js 本身(或者更确切地说是它的依赖项,o15apptofilemappingtable.js,https: //appsforoffice.microsoft.com/lib/1.1/hosted/o15apptofilemappingtable.js )已经在缩小的 JavaScript 中有一行能够找出 office.js 在 Outlook 环境之外加载并打印警告:

if(d._hostInfo.isRichClient){var e,a,u="Warning: Office.js is loaded outside of Office client",

这正是我正在寻找的东西,但我似乎无法理解如何自己实施这样的检查。我知道您可以通过使用 Office.onReady() 检查 Office.js 是否已完全加载(如此处所示:https ://docs.microsoft.com/en-us/office/dev/add-ins /develop/understanding-the-javascript-api-for-office),但我想要的是在加载 office.js 之前检查它是否真的有必要(当应用程序在 Outlook 环境之外运行时不是这样) )。

是否有人遇到过类似的情况并可能分享他的见解?

4

1 回答 1

0

要考虑的一个简单选项是将查询参数添加到清单中的加载项 URL。然后,当缺少该查询参数时,您知道应用程序直接在 Web 浏览器中运行。此方法还可用于区分清单中加载同一页面的多个 URL。

例如,清单 URL 如下所示:

<SourceLocation DefaultValue="https://.../taskpane.html?host=Outlook" />

这种方法的一个好处是,如果您愿意,您可以完全跳过加载 Office.js。

另一种方法是在加载 Office.js 后调用 API。以您的示例为基础,有一个名为 的类似 Outlook API Office.context.mailbox.diagnostics.hostName,它在旧版本的 Outlook 中可用(API 的要求集版本是 1.0,这是最低版本)。

但实际上,当不在 Outlook 中运行时,Office.js 不会加载 Outlook API,并且Office.context.mailboxundefined. 因此,在 javascript 中,您只需检查是否Office.context.mailbox已定义。

正如问题中所指出的,调用任何 Office API 都需要等到Office.initializeOffice.onReady()已被调用,因此它不是最佳性能的首选选项。

于 2019-10-24T21:20:22.440 回答