[将webapp加载为Outlook加载项时有条件地加载Office.js

问题描述 投票:0回答:1

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

根据关于该主题的现有问题(在此处找到:Check if Office.js is loaded outside of Office client,office-js-helpers通过使用提供了此类信息

OfficeHelpers.Utilities.host

这将返回“外观”或未定义,具体取决于上下文,这正是我要查找的内容(请注意,首先加载office.js,然后再加载另一个脚本以检查是否实际需要office.js) 。不幸的是,我必须支持Outlook的较早版本,即使在Outlook中加载上述解决方案,该解决方案也无法返回(比最新版本晚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环境之外运行时不需要)。

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

javascript outlook-addin office-js outlook-web-addins office-js-helpers
1个回答
0
投票

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

例如,清单URL如下所示:

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.