正如一些现有线程所建议的(例如,one, two, three), 当前的对话框不提供API发送经常消息从主页(例如任务窗格)发送到对话框。
所以我必须寻找解决方法:我们保留一个变量message
in localStorage
,然后我们使对话框选中经常如果值message
变化。这就像手动实现事件监听器一样localStorage
.
有谁知道如何以可靠且有效的方式实现这一点(鉴于 JavaScript 不是多线程语言)?我不希望这个监听器成本高昂,设置合适的间隔是多少?
Edit 1:
我尝试了 @PatrickEvans 建议的 StorageEvent。对于加载项和对话框站点,我们需要实现一个sendMessage...
and a receiveMessage...
由变量messageFromHostToSite
and messageFromSiteToHost
在存储中。
它在 Chrome 中的 Excel Online 和 IE 11 中的 Excel Online 中工作。但是,它在 Windows 7 或 10 的 Excel 2016 中不起作用;我们可以将项目设置为localStorage
并让他们回来,改变localStorage
似乎没有开火任何东西。
那么有人可以确认 Windows 7 或 10 的 Excel 2016 中确实不支持 StorageEvent 吗?在这种情况下,我仍在寻找其他解决方法......
Edit 2:
我最后做了一个简化的例子:这是xml file,这称为插件 and the site。它在 Excel Online 中运行良好,但不会在 Excel for Windows 中触发事件。
我在应用程序之间进行通信时遇到了类似的问题。在我的测试中,Excel Online storageEvent 有效,因为通信是在同一“实例”的浏览器选项卡之间进行的。对于 Windows 版 Excel,2 个加载项位于单独的浏览器“实例”中;不传达存储事件。更糟糕的是 Office for Mac (WebKit);它不传达 storageEvents,也无法从其他应用程序读取存储更改,除非重新启动它们 - 我相信这是因为存储值已为实例缓存(未写入磁盘,并且对其他实例/应用程序不可见) 。
因此,我相信 Excel Online 可以使用 StorageEvents,Excel for Windows 需要轮询(例如每秒检查一次),Excel for Mac 可能需要基于服务器的解决方案,例如 WebSockets。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)