2016 年 12 月 5 日更新:我们将很快发布一个 API 来检测平台信息(部分是为了响应人们非正式依赖的 _host_info URL 参数这一事实,需要最近为 Office Online 删除)。我们也有一个临时的解决方法来期待即将发布的官方 API。 有关 API 和解决方法的信息,请参阅“In Excel Online, OfficeJS API is not passing the host_Info_ parameter anymore to Excel Add-In”。
我保留了下面的旧答案,因为它仍然适用于大多数点亮场景。 仍应谨慎使用平台检测,因为查询 API 集可为您提供更细粒度的控制,并确保您的插件在添加到特定平台时“点亮”新功能] .
听起来你在描述一个“点亮”的场景。对于这类用例,您关心的并不是 实际 版本(您真的想要保留所有最低版本的内部列表吗? Excel Online 和 iOS,并保持更新?),而是您想要检查存在的功能。然后根据功能是否存在提供差异化体验。
为此,我建议您使用我们刚刚与这些 API 一起发布的全新 API(并且可以向后移植到所有以前的版本 - 只要您使用的是来自CDN,你应该很高兴)。该 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 集等(并在文档和 IntelliSense 中标记每个 API 可用的集版本)。这有意义吗?
为了完整起见,关于 Office.js 版本控制的其他一些注意事项:
1) 为确保您拥有最新的 API、错误修复等,您应该始终使用 CDN 位置,该位置会在我们推出新功能时就地更新。该位置是https://appsforoffice.microsoft.com/lib/1/hosted/office.js。 https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js 也有效,“1”版本目前只是“1.1”的别名……但从长远来看,最好切换到“1”网址。
2) 上述推论:您应该始终使用最新的 CDN 位置即使对于较旧的主机。这样一来,你们都可以“点亮”新功能和错误修复(包括旧主机版本)。基本上,您始终可以使用最新的 CDN,并依靠 Office.js 脚本的动态加载来加载您需要的实际主机特定文件。
3) 您可以将新的 isSetSupported API 用于新的 API 集“ExcelApi”和“WordApi”,以及现有的集(例如,“MatrixBinding”)。
4) 对于属于“Office”一部分的 API。命名空间,您还可以使用“防御性编程”对单个函数进行运行时检查(例如,检查是否支持 Office.context.document.bindings && Office.context.document.bindings.addFromSelectionAsync)。但是,您可以看到这可能会变得非常冗长,因此检查集合应该容易得多。此外,这不适用于“Excel”或“Word”命名空间下的 API,因此更有理由使用 Office.context.requirements.isSetSupported API。
5) 最后:对于只有在存在给定要求集时才有意义运行的应用程序,您可以specify the API set in the app's manifest。话虽如此,清单检查是关于指定绝对最低要求,否则应用程序将无法运行(甚至在插入对话框中显示为可用)。同时,运行时检查可让您控制如果特定 API 不受支持(提供“点亮”功能选项或降级体验),您希望如何做出反应。因此,我通常建议使用对您的应用有意义的最低清单要求,然后进行运行时检查以发现新功能。
希望这会有所帮助,
~ 迈克尔·兹拉特科夫斯基
Microsoft Office 可扩展性团队的开发人员