javascript - 在 UWP Javascript 应用程序中的两个窗口之间共享状态或传递消息
问题描述
我正在使用此处找到的示例应用程序投影,它允许我打开一个主应用程序窗口,并在我的第二台显示器上显示一些其他内容。
现在我想要的是两个窗口之间的 javascript 具有某种共享状态或传递消息的方式。在scenario1.js 中,启动新窗口的代码如下所示:
var view = window.open("ms-appx:///html/secondaryView.html", null, "msHideView=yes");
现在我知道这个变量有一个view.postMessage()
功能,但是在新窗口(secondaryView.js)的javascript中,我不知道如何监听消息。我也不知道在两个窗口之间是否还有其他我没有想到的明显的共享状态方式。
[编辑]这里提供的 localStorage 解决方案很好并且可以工作,但不如使用view.postMessage
解决方案
从第一个窗口中的任何 javascript 代码中,您可以发布如下消息:
view.postMessage({ a: 'b' }, '*'); // may replace * with the beginning of the result of window.location.href
在第二个窗口中,此代码将收到消息:
window.addEventListener('message',
function(event) {
var message = event.data; // event.data = { a: 'b' }
});
将消息从第二个窗口发布到第一个窗口,它非常相似,但用于window.opener
引用打开此视图的视图:
window.opener.postMessage({ a: 'this is from the second window' }, '*');
并在原始的 javascript 进程中再次注意它window.addEventListener('message', (event) => {})
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
感谢 Raymond Chen
推荐阅读
- sql-server - SQL Server 2016+ 更新没有主键的大型数据集
- react-native - React Native - Redux - 冻结 UI
- r - knitr:创建环境以在完成时删除的块之间共享变量
- html - overflow-x 是滚动,overflow-y 是同时覆盖
- angular - ng 部署到 gh-pages:默认页面而不是应用程序
- mysql - 使用 Workbench 从本地计算机连接到 RDS 实例
- git - git commit --fixup hash 什么都不做
- c# - 调整 Chartarea 大小并在 Chart 上添加滚动条(不是 Chartarea)
- flutter - 带有白色数字的 showDateRangePicker
- node.js - 我在使用 npx/UI 的 create-rect-app 时遇到问题