2016 年 12 月 5 日更新:我们将很快发布一个 API 来检测平台信息(部分原因是_host_info
人们最近需要为 Office Online 删除 URL 参数,人们非正式地依赖该参数)。我们也有一个临时的解决方法来期待即将发布的官方 API。有关 API 和解决方法的信息,请参阅“在 Excel Online 中,OfficeJS API 不再将 host_Info_ 参数传递给 Excel 加载项”。
我保留下面的旧答案,因为它仍然适用于大多数点亮场景。平台检测仍应谨慎使用,因为查询 API 集可为您提供更细粒度的控制,并确保您的插件在添加到特定平台时“点亮”新功能]。
听起来你在描述一个“点亮”的场景。对于这些用例,它并不是您关心的实际版本(您是否真的想要保留所有最低版本的内部列表 - 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 集等(并在文档和 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) 最后:对于只有在存在给定需求集时才有意义运行的应用程序,您可以在应用程序的清单中指定 API 集。话虽如此,清单检查是关于指定绝对最低必需品,否则应用程序将无法运行(甚至在插入对话框中显示为可用)。同时,运行时检查可让您控制如果特定 API 不受支持(提供“点亮”功能选项或降级体验),您希望如何做出反应。因此,我通常建议使用对您的应用有意义的最低清单要求,然后进行运行时检查以启动新功能。
希望这可以帮助,
~ Michael Zlatkovsky Microsoft
Office 可扩展性团队开发人员