Учебник по Electron.js

Использование файлов

При работе с 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>