При работе с Electron нам доступен модуль fs
из Node.js, который позволяет работать с файловой системой, поэтому мы можем сохранять данные в файл, а затем считывать их из файла. В качестве примера при закрытии окна будем сохранять местоположение окна и его размеры в файл (листинг 9.2). При запуске программы считаем эти данные из файла и отобразим окно в том же месте и с теми же размерами, которые были в момент закрытия окна. Содержимое файла index.html
приведено в листинге 9.3.
Листинг 9.2. Содержимое файла C:\book\e1\main.js
const { app, BrowserWindow } = require('electron');
const fs = require('fs');
const path = require('path');
let obj = null;
try {
let p = path.join(__dirname, 'settings.txt');
let data = fs.readFileSync(p, {encoding: 'utf8'});
obj = JSON.parse(data);
} catch (e) {}
let win = null;
let options = {
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
};
if (!obj) {
options.center = true;
options.width = 800;
options.height = 600;
}
else {
options.center = false;
options.x = obj.x;
options.y = obj.y;
options.width = obj.width;
options.height = obj.height;
}
function createWindow() {
win = new BrowserWindow(options);
win.webContents.loadFile('index.html');
win.on('close', () => {
try {
let p = path.join(__dirname, 'settings.txt');
let data = JSON.stringify( win.getBounds() );
fs.writeFileSync(p, data, 'utf8');
} catch (e) {}
});
win.on('closed', () => {
win = null;
});
}
app.whenReady().then( () => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
} );
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
Листинг 9.3. Содержимое файла C:\book\e1\index.html
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'">
<title>Использование файлов</title>
</head>
<body>
<h1>Использование файлов</h1>
</body>
</html>