StorageEvent在Excel for Windows

时间:2017-06-14 10:08:27

标签: local-storage ms-office storage setinterval office-js

正如一些现有主题建议的那样(例如onetwothree),当前Dialog Box不提供API来定期发送 从主机页面(例如,任务窗格)到对话框的消息。

所以我必须寻找一种解决方法:我们在message中保留变量localStorage,然后如果{{1}的值,我们会使对话框定期检查 }} 变化。这就像message手动实现事件监听器一样。

有没有人知道如何以一种确定有效的方式实现它(鉴于JavaScript不是多线程语言)?我不希望这个监听器成本高昂,设置的适当间隔是什么?

修改1:

我尝试了@PatrickEvans建议的StorageEvent。对于加载项和对话框网站,我们需要在存储中通过变量localStoragesendMessage...实现receiveMessage...messageFromHostToSite

它在Chrome中的Excel Online和IE 11中的Excel Online中工作。但是,它在Excel 2016 for Windows 7或10中不起作用;我们可以将项目设置为messageFromSiteToHost并将其恢复,更改localStorage似乎不会触发任何内容。

那么有人可以确认Excel 2016 for Windows 7或10确实不支持StorageEvent吗?在那种情况下,我仍在寻找其他解决方法...

编辑2:

我最后做了一个简化的例子:这里是xml file,它调用了the add-inthe site。它在Excel Online中运行良好,但不会在Excel for Windows中激活事件。

enter image description here

1 个答案:

答案 0 :(得分:0)

我在应用之间进行通信时遇到了类似问题。在我的测试中,Excel Online storageEvent可以工作,因为通信是在同一个"实例"的浏览器选项卡之间进行的。使用Excel for Windows,2个加载项位于不同的浏览器"实例&#34 ;;不通信存储事件。更糟糕的是Office for Mac(WebKit);它没有传递storageEvents,也无法从其他应用程序读取存储更改,除非它们重新启动 - 我相信这是因为存储值是为实例缓存的(不写入磁盘而对其他实例/应用程序不可见)

因此,我相信Excel Online可以使用StorageEvents,Excel for Windows需要轮询(例如每秒检查一次),Excel for Mac可能需要基于服务器的解决方案,例如WebSockets。