При изучении языков и технологий принято создавать программу, которая здоровается со всем миром. Не будем нарушать традицию и продемонстрируем как это будет выглядеть на Electron. Создадим следующую структуру файлов:
C:\book\e1\
css\
style.css
index.htm
main.js
preload.js
Содержимое файла main.js
приведено в листинге 1.1, файла index.html
— в листинге 1.2, файла style.css
— в листинге 1.3, а файла preload.js
— в листинге 1.4.
Листинг 1.1. Содержимое файла C:\book\e1\main.js
const { app, BrowserWindow } = require('electron');
const path = require('path');
function createWindow() {
const win = new BrowserWindow({
width: 500,
height: 200,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
});
win.loadFile('index.html');
}
app.whenReady().then( () => {
createWindow();
app.on('activate', () => { // Для MacOS
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
} );
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') { // Кроме MacOS
app.quit();
}
});
Листинг 1.2. Содержимое файла 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'">
<link rel="stylesheet" href="css/style.css">
<title>Первая программа на Electron</title>
</head>
<body>
<h1>Привет, мир!</h1>
<div id="test"></div>
</body>
</html>
Листинг 1.3. Содержимое файла C:\book\e1\css\style.css
h1 {
color: red;
text-align: center;
}
#test {
text-align: center;
font-weight: bold;
}
Листинг 1.4. Содержимое файла C:\book\e1\preload.js
window.addEventListener('DOMContentLoaded', () => {
let el = document.getElementById('test');
if (el) {
el.innerText = 'Версия Electron: ' + process.versions['electron'];
}
});
Запустим программу на выполнение:
C:\book\e1>npm run start
> e1@1.0.0 start C:\book\e1
> electron .
Давайте рассмотрим структуру программы. В листинге 1.1 в первой строке импортируются идентификаторы app
и BrowserWindow
из пакета electron
:
const { app, BrowserWindow } = require('electron');
Следующая инструкция импортирует встроенный модуль path
:
const path = require('path');
Затем определяется функция createWindow()
внутри которой создается объект окна с помощью класса BrowserWindow
. Конструктор класса принимает объект с опциями. Мы указываем опции width
и height
задающие ширину и высоту окна соответственно.
Опция webPreferences
позволяет задать дополнительные настройки. В качестве значения передается объект с опциями. С помощью опции preload
указываем путь к файлу preload.js
. Внутри этого файла мы имеем доступ как к объектной модели документа, так и к объектам Node.js. В частности при наступлении события DOMContentLoaded
(структура документа сформирована) мы получаем ссылку на элемент с идентификатором test
и внутри него выводим версию Electron, которую динамически получаем через свойство process.versions
.
Далее с помощью метода loadFile()
объекта окна загружаем файл index.html
:
function createWindow() {
const win = new BrowserWindow({
width: 500,
height: 200,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
});
win.loadFile('index.html');
}
Далее при инициализации приложения создаем объект окна:
app.whenReady().then( () => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
} );
Внутри обработчика события window-all-closed
(возникает при закрытии всех окон приложения) завершаем работу программы, вызывая метод quit()
объекта приложения:
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});