我当前正在构建一个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
这将返回“ outlook”或未定义,具体取决于上下文,这正是我要查找的内容(请注意,首先加载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环境之外运行时没有必要)。
有人遇到过类似情况并可能分享他的见解吗?
答案 0 :(得分: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.mailbox
是undefined
。因此,在javascript中,您只需检查是否定义了Office.context.mailbox
。
问题中指出,调用任何Office API都需要等到Office.initialize
或Office.onReady()
被调用之后,因此它不是获得最佳性能的首选。