整洁的方式获得环境(即Office版本)

不幸的是,在所有环境中,office API的某些function并不完全相同(例如:Excel Online和Excel 2013中的格式)。 另外,一些不错的新function在Excel 2013中不可用,但在Excel 2016中可用(Excel.js)

当然,我可以告诉用户他们只能在2016年使用我的应用程序,而不是实现在所有环境中都不完全支持的事情。

我宁愿将自己的应用程序提供给Excel 2013的用户,即使他们没有办法(或倾向于)升级到2016年。我宁愿在function较差的环境中优雅地降级我的function列表,而不是将应用程序function限制为整个)

封装与文档的所有交互并根据环境运行不同的代码是很容易的。 也就是说,如果我知道我所处的确切环境是什么。当前的office.js提供了一个很好的方式来发现主机应用程序的版本和上下文(在线/离线)吗? 我无法在office.context等中find任何东西。

网上有一些关于整个.getContext链入侵的build议,但这些链接似乎是“无证”( http://wp.sjkp.dk/how-to-detect-if-an-app-for-office-is – 从办公室打开/ ),所以我不是很高兴。

有什么build议么?

更新2016年12月5日:我们将很快发布一个API来检测平台信息 (部分原因是最近需要为Office Online删除_host_info URL参数,这些参数非正式地依赖于这个事实)。 我们也有一个临时的解决方法,预计即将到来的官方API。 请参阅“ 在Excel Online中,OfficeJS API不再将Host_Info_parameter passing给Excel加载项 ”以了解有关API和解决方法的信息。

我在下面保留旧的答案 ,因为它对于大多数亮起的情况仍然相关的平台检测仍然应该谨慎使用,因为查询API集给你更细致的控制 ,并确保你的插件添加到特定的平台“点亮”新function。


这听起来像是在描述一个“点亮”的场景。 对于这类用例,并不是真正关心的版本(你真的想保留所有最低版本的内部列表 – Excel桌面,并很快Excel Online和iOS,并保持那更新?),而是,你想检查的东西存在的能力 。 然后根据能力是否存在提供差异化​​的体验。

为此,我会推荐一个全新的API,我们刚刚发布在这些API旁边(并且被移植到所有以前的版本 – 只要您使用的是来自CDN的最新Office.js,您应该很好去)。 该API使您能够在运行时检查是否支持特定的API集。 看起来像:

 if (Office.context.requirements.isSetSupported('ExcelApi', 1.1)) { // Do something that is only available via the new APIs } 

官方文件即将出版,我们的样本也将很快开始使用。 敬请关注…

目前新发布的Excel API集都在“ExcelApi”版本1.1下。 当我们添加新的API时,我们将它们添加到1.2集合,1.3集合等等(并且在文档中标记并且智能感知每个API可用的集合版本)。 那有意义吗?


为了完整起见,还需要注意一些有关Office.js版本控制的其他内容:

1)为确保您拥有最新的API,错误修复程序等,您应始终使用CDN位置,在我们推出新function时将其就地更新。 该位置是lib/1/hosted/office.jshttps://appsforoffice.microsoft.com/lib/1.1/hosted/office.js也适用,“1”版本目前只是“1.1”的别名;……但长期来看,这可能是最好的切换到“1”url。

2)推论如上: 即使对于较老的主机,也应该使用最新的CDN位置。 这样,你们都可以获得新function的“点亮”,并修复了错误(包括旧主机版本)。 基本上,您总是可以使用最新的CDN,并依靠Office.js脚本的dynamic加载来加载您需要的实际的主机特定的文件。

3)对于新的API集“ExcelApi”和“WordApi”以及现有集(例如“MatrixBinding”),您可以使用新的isSetSupported API。

4)作为“办公室”的一部分的API。 命名空间,您也可以使用“防御性编程”来执行单个函数的运行时检查(例如,检查是否支持Office.context.document.bindings && Office.context.document.bindings.addFromSelectionAsync) 。 但是,您可以看到这可能会变得非常冗长,因此检查一组应该会容易得多。 此外,这将不适用于“Excel”或“Word”命名空间下的API,因此更需要使用Office.context.requirements.isSetSupported API。

5)最后:对于只有在给定的需求集合存在的情况下运行才有意义的应用程序,您可以在应用程序的清单中指定API集合 。 也就是说,清单检查是指定绝对最低要领 ,没有这个要求,应用程序不会运行(甚至不能在插入对话框中显示)。 同时,运行时检查可让您控制如果不支持某个特定的API(提供“lightup”function或降级的体验)选项,您将如何反应。 所以,我通常会build议使用对您的应用程序有意义的最低清单要求,然后进行运行时检查以点亮新function。

希望这可以帮助,

〜Michael Zlatkovsky
MSFT的Office Extensibility团队开发人员

Interesting Posts