两个任务窗格的通信

Communication of two taskpanes

我正在制作一个包含两个功能区按钮的 Office 加载项。每个按钮都链接到不同的 TaskpaneId,单击每个按钮会打开不同的任务窗格:

<bt:Urls>
    <bt:Url id="Contoso.Taskpane1.Url" DefaultValue="https://localhost:3000/addin/page1" />
    <bt:Url id="Contoso.Taskpane2.Url" DefaultValue="https://localhost:3000/addin/page2" />
</bt:Urls>

现在,我想实现这两个页面之间的一些通信。例如,在对 page1 进行一些操作后,我希望 page2 自动刷新(从服务器或 localStorage 重新加载数据)。结果,当我们点击 page2 时,它已经是最新的了。目前还没有系统更新,要刷新page2,我们必须点击它的功能区按钮。

https://localhost:3000/ 是用 mean-stack 构建的,所以页面使用 angularjs 并且后面有一个服务器。两个页面通信的一种方式是通过服务器:page1通过socket.io向服务器发送消息,然后服务器通过socket.iopage2发送消息。有点乏味。

有谁知道 JavaScript API for Office 是否已经有任何简单的(和跨平台的)方法来允许 2 个任务窗格之间的这种通信?

PS: 使用 localStorageStorageEvent 不是一个好主意,因为它似乎在 [=40 中不起作用=] Mac 或 Windows.

暂时没有很好的解决办法。对于 Script Lab,我们使用本地存储和计时器在不支持事件 (IE 11) 的 platforms/browsers 上每秒检查几次时间戳。本地存储的问题与其说是对计时器的需求,不如说是您不能真正将其限定为一组特定的任务窗格。相反,它最终也会影响其他文档上的任务窗格。对于脚本实验室,我们决定接受这种行为,而不是将精力花在基于服务器的通信上(我假设你的意思是 socket.io 或类似的?)