Electronでは、主なプロセスでBrowserWindowを開きます。 BrowserWindowは1つのhtmlページをロードし、同じウィンドウは最終的に別のhtmlページをロードします。 main.jsが2ページ(login.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`, {})
}
は、グローバル変数が間接参照/ load.html
const remote = require('electron').remote;
var testGlobal = remote.getGlobal('mainState')
testGlobal.settings = 'test value'
testGlobal.settings.inner = 'test value2'
削除されますか?ドキュメントは、レンダラープロセスがグローバル変数を逆参照する場合、変数はgcされると言います。これをテストしようとすると一貫性のない結果が得られ、Iよりも賢明な説明が欲しいです。
有益な回答ありがとうございます。私はあなたのアイデアを使い始めましたが、変数の同期化に関しては問題があります。今私は、変数を変更するためにレンダラーからメインにメッセージを送信すると、レンダラーの次の行が実行されるまでに変数が変更されないことに気付きました。どのようにして2つを同期させて、一貫性のある値にすることができます –
これはjavascriptで非同期関数が機能する方法です。あなたは 'ipcRenderer.sendSync'を使うことができますが、これはあなたのレンダラを完全にブロックします。 – RoyalBingBong