正如一些现有主题建议的那样(例如one,two,three),当前Dialog Box不提供API来定期发送 从主机页面(例如,任务窗格)到对话框的消息。
所以我必须寻找一种解决方法:我们在message
中保留变量localStorage
,然后如果{{1}的值,我们会使对话框定期检查 }} 变化。这就像message
手动实现事件监听器一样。
有没有人知道如何以一种确定有效的方式实现它(鉴于JavaScript不是多线程语言)?我不希望这个监听器成本高昂,设置的适当间隔是什么?
修改1:
我尝试了@PatrickEvans建议的StorageEvent。对于加载项和对话框网站,我们需要在存储中通过变量localStorage
和sendMessage...
实现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-in和the site。它在Excel Online中运行良好,但不会在Excel for Windows中激活事件。
答案 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。