获得环境的简洁方法(即Office版)

Ar *_* Es 7 office365 office-js

遗憾的是,Office API的某些功能在所有环境中的行为都不完全相同(例如:Excel Online和Excel 2013中的格式化).此外,Excel 2013中没有一些不错的新功能,但在Excel 2016中可用(Excel.js)

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

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

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

在网上有一些关于黑客攻击整个.getContext链条的建议,但这些似乎是"无证件"的,所以我对此并不满意.

有什么建议?

Mic*_*oft 12

更新2016年12月5日:我们很快将发布一个API来检测平台信息(部分是为了响应_host_info最近需要为Office Online删除URL非常规依赖的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
}
Run Code Online (Sandbox Code Playgroud)

它的官方文档即将发布,我们的样本也将很快开始使用它.敬请关注...

当前一组新发布的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"URL.

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.isSetSupportedAPI.

5)最后:对于只有在给定需求集存在的情况下才能运行的应用程序,您可以在应用程序的清单中指定API集.话虽这么说,清单检查是关于指定绝对最小要素,没有它,应用程序就不会运行(甚至在插入对话框中显示为可用).同时,运行时检查可让您控制在特定API不受支持时的反应方式(提供"亮点"功能选项或降级体验).因此,我通常建议使用对您的应用程序有意义的最低清单要求,然后进行运行时检查以点亮新功能.

希望这可以帮助,

~Michael Zlatkovsky
   Office扩展性团队开发人员,MSFT