在UWP Javascript应用程序的两个窗口之间共享状态或传递消息

时间:2019-02-06 17:27:05

标签: javascript uwp

我正在使用示例应用程序Projection found here,它使我可以打开一个主应用程序窗口,并在第二台监视器上显示其他内容。

现在我想要的是两个窗口之间的javascript具有某种共享状态或传递消息的方式。在scenario1.js中,用于启动新窗口的代码如下:

var view = window.open("ms-appx:///html/secondaryView.html", null, "msHideView=yes");

现在我知道这个变量具有view.postMessage()函数的事实,但是在新窗口(secondaryView.js)的javascript中,我不知道如何收听消息。我也不知道在两个窗口之间是否还有其他显而易见的共享状态的方式。

[edit] here中提供的localStorage解决方案很好并且可以运行,但是不如使用view.postMessage

1 个答案:

答案 0 :(得分:2)

在第一个窗口中的任何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' }, '*');

再次使用window.addEventListener('message', (event) => {})

在原始javascript处理中注意它

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

感谢Raymond Chen