获取 PowerPoint 内容插件的幻灯片索引或可见性状态 (Office.js)

Get slide index or visibility state of PowerPoint content addin (Office.js)

我正在使用 Office.js API 编写 PowerPoint 内容插件。我需要一个方法 对于该插件的每个实例,以确定包含的索引 滑动,或者,如果这是不可能的,插件的可见性状态(即 包含的幻灯片当前是否在屏幕上可见)。

The documentation 建议 没有 API 专门用于此目的,所以我一直在使用 以下方法:

  1. 加载项初始化时(在 Document.initialize 回调中), 使用 Document.getSelectedDataAsync 请求当前选择的幻灯片 方法。
  2. 由于插件在可见之前无法初始化,我们几乎可以 确保在步骤 1 中获得的索引是包含幻灯片的索引之一 (除非用户足够快地在更换幻灯片时 getSelectedDataAsync 正在进行异步通信。

然而,在第2步中所做的假设被证明是错误的。它拥有 对于 PowerPoint Online,但桌面 PowerPoint 的行为不同。

具体来说,在幻灯片放映模式下,如果当前放映的幻灯片旁边 包含一个插件,并且该插件尚未初始化,它会被预初始化 尽管它不是 visible/active。在所有这些预先初始化的 addins, Document.getSelectedDataAsync returns 当前幻灯片的索引 显示,这不是包含插件的那个。

所以问题是:有没有办法或多或少可靠地确定包含 幻灯片索引,同时适用于网页版和桌面版 PowerPoint 的方式?

如果否,第二个问题:是否有办法让插件确定包含的幻灯片当前是否在幻灯片放映模式下在屏幕上可见?

我找到了一个适用于 PowerPoint Online 的软件(检查 window.innerHeight 幻灯片放映模式),但它依赖于内部实现细节 随时可能更改,最关键的是,它不适用于桌面 幻灯片。

桌面 PowerPoint 似乎在单独的 window 中显示每个插件(如 window.parent 等于 window),我没能找到 API 或解决方法 将允许判断 window 当前是否可见。 Page Visibility API 似乎非常适合这个目的,甚至在 IE11 中也实现了,但是 它在 PowerPoint 中不起作用(visibilitychange 事件不会触发, document.visibilityState 始终等于 "visible",即使插件是 在当前隐藏的幻灯片上)。

目前,PowerPoint 客户端似乎 return 活动幻灯片而不是父幻灯片,因为函数“getSelectedDataAsync”是异步的。

is there a way to more or less reliably determine the containing slide index, the way that works in both web and desktop versions of PowerPoint?

据我所知,没有API到return包含内容应用程序的幻灯片。如果您希望 Office 加载项支持此 API,您可以提交来自 here 的反馈。