在 Electron 中,我的主进程打开了一个 BrowserWindow。 BrowserWindow 加载一个 html 页面,然后同一窗口最终加载另一个 html 页面。
main.js
var mainWindow;
global.mainState = {
settings: {}
}
mainWindow = createWindow('main', {
width: 1000,
height: 800,
});
if (curState == 'load') {
mainWindow.loadURL(`file://${__dirname}/interface/load.html`, {})
}
if (curState == 'login') {
mainWindow.loadURL(`file://${__dirname}/interface/login.html`, {})
}
加载.html
const remote = require('electron').remote;
var testGlobal = remote.getGlobal('mainState')
testGlobal.settings = 'test value'
testGlobal.settings.inner = 'test value2'
当main.js加载第二个页面(login.html)时,全局变量会被删除/取消引用吗?文档说,如果渲染器进程取消引用全局变量,则该变量将被GC。当我尝试测试这个时,我得到了不一致的结果,我只是想从比我更聪明的人那里得到一些解释。
使用IPC设置全局值。
@RoyalBingBong 是正确的“remote.getGlobal()
只是给你一份副本mainState
而不是参考。”
看起来您正在更改全局变量的值,但事实并非如此。因此,例如,当我刷新 Electron 浏览器窗口时,该全局变量的值将恢复为原来的值。
我发现正确更改全局变量值的唯一方法是使用ipcMain
and ipcRenderer
(详细的方式)。
main.js
const { ipcMain } = require( "electron" );
ipcMain.on( "setMyGlobalVariable", ( event, myGlobalVariable ) => {
global.myGlobalVariable = myGlobalVariable;
} );
渲染器.js
const { ipcRenderer, remote } = require( "electron" );
// Set MyGlobalVariable.
ipcRenderer.send( "setMyGlobalVariable", "Hi There!" );
// Read MyGlobalVariable.
remote.getGlobal( "MyGlobalVariable" ); // => "Hi There!"
现在,我可以刷新我的 Electron 窗口或启动一个新的渲染器进程,并且全局变量的值将正确地成为我设置的值,在本例中为“Hi There!”。
您还可以看到,为了阅读它,我使用了更简单的remote.getGlobal
。我没有测试过当值改变并且this的值没有更新时这是否会导致问题。如果是这种情况,我可能必须回到这个答案并使用另一个答案ipcMain
and ipcRenderer
手动读取全局变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)