gpt4 book ai didi

javascript - 在 Electron 中使用 ipc 从渲染器设置全局变量(再次)

转载 作者:行者123 更新时间:2023-12-03 12:41:33 25 4
gpt4 key购买 nike

我正在创建一个可以在窗口 1 到窗口 2 之间来回切换的应用程序。我保持两个窗口都打开,但使用 currentWindow.hide() 隐藏当前未使用的窗口。每次进入窗口 2 时,我都想增加一个计数器。我尝试使用 Using ipc in Electron to set global variable from renderer 中的代码设置一个全局变量并在每次进入窗口 2 时增加它:

main.js

ipcMain.on('setMyGlobalVariable', (event, myGlobalVariableValue) => {
global.myGlobalVariable = myGlobalVariableValue;
});

renderer.js
lv = remote.getGlobal("MyGlobalVariable"); // Read
if (lv = null) lv = 0;
lv = lv + 1;
console.log(lv);
ipcRenderer.send("setMyGlobalVariable", lv); // Store New Value

不幸的是,每次我回到窗口2时,lv都是空的!这可以做到吗,还是我做错了什么?

最佳答案

您没有说明如何管理窗口的显示/隐藏 - 因此有几种方法可以执行您想要的操作。

您可以将其保留在 Main 内通过订阅 show 获得上下文您要跟踪的窗口的事件,只需直接增加那里的计数器。 focus如果您实际上没有隐藏 window ,甚至会以相同的方式工作。

mainWindow.on('show', event => {
global.sharedData.counter += 1;
console.log('counter', global.sharedData.counter);
});

从渲染上下文 – 来自文档: How to share data between web pages?

您不能直接从 remote 增加全局属性- 这失败了: remote.getGlobal("counter")+=1;
但是您可以更改对象的内容: remote.getGlobal("sharedData").counter += 1;
Main.js
// initialize the container:
global.sharedData = {counter: 0};

// not needed but just for sanity check
ipcMain.on('app-message', (event, arg) => {
switch (arg.event) {
case "log counter":
console.log('counter', global.sharedData.counter);

break;
}
});

渲染器上下文
  // wrapped in a button click function
$("#counter-btn").on("click", function (e) {


// *** this is the only line that matters ***
remote.getGlobal("sharedData").counter += 1;


// sanity check
let c = remote.getGlobal("sharedData").counter;
console.log('counter', c);

// tell main to show the value
ipcRenderer.send('app-message', { event: "log counter" });
})

关于javascript - 在 Electron 中使用 ipc 从渲染器设置全局变量(再次),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60357641/

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