首页 > 解决方案 > 在 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

标签: javascriptuwp

解决方案


从第一个窗口中的任何 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


推荐阅读