gpt4 book ai didi

javascript - 使用 Node js ('nw.gui' 将对象传递给其他窗口)

转载 作者:行者123 更新时间:2023-11-30 12:29:25 24 4
gpt4 key购买 nike

我试图寻找某种方法来创建多个“窗口”实例,然后使用一些消息来传达这些窗口实例。然后我遇到了link here .但是我不确定我们是否可以使用脚本在运行时传递一些对象。任何帮助将不胜感激。

谢谢

最佳答案

我向 alexpods 致以最深切的歉意,但 stackoverflow 不允许我添加评论,因此我不得不提取您的整个答案并对其进行修改。

在 nw.js 中,至少(大多数?)0.19.0,emit 不再起作用,返回 gui.Window.open 的处理程序不起作用,.postMessage 需要 2 个参数。

所以这是一个更新的答案,alexpods 的修改版本(因为我无法在他的答案中添加评论)。也感谢您的回答 alexpods,因为它确实对我有帮助。


将 postMessage 与 JSON.stringify 和 JSON.parse 结合使用。您可以在 node-webkit 中使用这些技术中的任何一种。因此,在当前窗口中,您将事件监听器添加到“消息”事件并打开新窗口:

第一个窗口

var gui = require('nw.gui');
var newWindow; //we declare a global variable to store the handler for our new window

window.addEventListener('message', function(event) {
var data = JSON.parse(event.data);
console.log(data);
}, false);


gui.Window.open('/some/path', {}, function(newWin) {
newWindow = newWin;
newWindow.on ('loaded', function(){ //We only post a message when the new window is ready to listen to events.
newWindow.window.postMessage(JSON.stringify({ some: 'very important data1' }), "*"); //the second parameter specifies the message origin. afaik, this is merely a string and has no effect beyond being there
});
});

在新打开的窗口中为'消息'事件添加事件监听器:

新打开的窗口

window.addEventListener('message', function(event) {
var data = JSON.parse(event.data);
console.log(data);
}, false);

现在您可以使用 postMessage 在这两个窗口之间进行通信。例如:

第一个窗口

您会注意到上面显示的 postMessage 包装在一个“loaded”事件中,该事件本身包装在一个 onComplete 事件中。这是因为无法保证在调用它时,newWindow 已准备好接收事件,或者它甚至已经分别分配了窗口句柄。如果您不想将代码放在那里,您可能至少需要检查窗口是否已经创建。

if (typeof(newWindow) != 'undefined') {
if (newWindow.window.document.readyState == "complete") {
newWindow.window.postMessage(JSON.stringify({ some: 'very important data1' }), "*");
}
}

新打开的窗口

window.opener.postMessage(JSON.stringify({ some: 'very important data2' }), "*");

关于javascript - 使用 Node js ('nw.gui' 将对象传递给其他窗口),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com