010 ΠΠΎΠ΄ΡΠ»Ρ app
ΠΠΎΠ΄ΡΠ»Ρ app
ΡΡΠΎ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° on
ΡΠ»Π΅ΠΊΡΡΠΎΠ½ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ
src > main > index.js
import { app } from "electron";
// ΡΡΠΎ ΠΈΠ²Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½Π° macOS ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
app.on("will-finish-launching", () => {
console.log("will-finish-launching");
});
// ΠΡΠΎ ΠΈΠ²Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
app.on("ready", () => {
console.log("ready");
});
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΏΡΠΎΠΌΠΈΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
import { app } from "electron";
app.whenReady().then(() => console.log("App is ready"));
Π’Π°ΠΊ ΠΆΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈΠ²Π΅Π½ΡΡ Π½Π° Π²ΡΡ ΠΎΠ΄:
before-quit
Π΄ΠΎ Π·Π°ΠΊΡΡΡΠΈΡ Π²ΡΠ΅Ρ ΠΎΠΊΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡwill-quit
ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ Π²ΡΠ΅Ρ ΠΎΠΊΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡquit
ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΡ ΡΠΌΠ΅Π½Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΈΡ Π²ΡΡ ΠΎΠ΄Π° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΡΡΡ - ΠΎΠ½ΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ·ΠΎΠ²Π°
import { app } from "electron";
app.on("before-quit", () => console.log("before quit"));
app.on("will-quit", () => console.log("will quit"));
app.on("quit", () => console.log("quit"));
app.whenReady().then(() => {
// ΡΡΠ½ΠΊΡΠΈΡ quit Π²ΡΠΊΠ»ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
setTimeout(() => app.quit(), 3000);
});
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
quit()
- Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΠ²Π΅Π½ΡΡquit
. ΠΠ±ΡΡΠ½ΡΠΉ Π²ΡΡ ΠΎΠ΄.exit()
- Π²ΡΡ ΠΎΠ΄ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ²Π΅Π½Ρquit
ΠΈ Π±Π΅Π· ΡΠΏΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΡ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅
ΠΠ΅ΡΠΎΠ΄Ρ getAppPath()
(ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΡΡ Π΄ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) ΠΈ getPath()
(ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΡΡΡ) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅.
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π΄Π΅Π±Π°Π³Π³Π΅ΡΠ° ΠΌΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΡΠΊΠ°Π΅ΠΌ ΠΏΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠΎΡΠΊΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π³Π΄Π΅ ΠΌΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ application
.
import { app } from "electron";
app.whenReady().then(() => {
let application = app;
debugger;
});
Π ΡΡΡ ΡΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΡΡ Π΄ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ°Π»ΡΡΠ΅ ΠΈΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΡ getPath()
, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²Π°ΠΆΠ½ΡΠ΅ ΠΏΡΡΠΈ:
temp
- Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅userData
- Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌlogs
- ΠΏΠ°ΠΏΠΊΠ° Ρ Π»ΠΎΠ³Π°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡexe
- ΠΏΠ°ΠΏΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
name
Β string - You can request the following paths by the name:home
Β Userβs home directory.appData
Β Per-user application data directory, which by default points to:%APPDATA%
Β on Windows$XDG_CONFIG_HOME
Β orΒ~/.config
Β on Linux~/Library/Application Support
Β on macOSuserData
Β The directory for storing your appβs configuration files, which by default is theΒappData
Β directory appended with your appβs name. By convention files storing user data should be written to this directory, and it is not recommended to write large files here because some environments may backup this directory to cloud storage.sessionData
Β The directory for storing data generated byΒSession
, such as localStorage, cookies, disk cache, downloaded dictionaries, network state, devtools files. By default this points toΒuserData
. Chromium may write very large disk cache here, so if your app does not rely on browser storage like localStorage or cookies to save user data, it is recommended to set this directory to other locations to avoid polluting theΒuserData
Β directory.temp
Β Temporary directory.exe
Β The current executable file.module
Β TheΒlibchromiumcontent
Β library.desktop
Β The current userβs Desktop directory.documents
Β Directory for a userβs βMy Documentsβ.downloads
Β Directory for a userβs downloads.music
Β Directory for a userβs music.pictures
Β Directory for a userβs pictures.videos
Β Directory for a userβs videos.recent
Β Directory for the userβs recent files (Windows only).logs
Β Directory for your appβs log folder.crashDumps
Β Directory where crash dumps are stored.
Π’Π°ΠΊ ΠΆΠ΅ Ρ Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ app
. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°Ρ Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΠΎ Π²ΡΠ΅ Π±Ρ ΠΎΠ½ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ API ΠΈ ΡΡΠΎ Π²ΡΠ·Π²Π°Π»ΠΎ Π±Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄Π°Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΊΠΎΠ½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·
ΠΠ΄Π½Π°ΠΊΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΎΠ»Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
// ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
const lock = app.releaseSingleInstanceLock();
// Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, ΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ Π²ΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ
if (!lock) {
// Π²ΡΡ
ΠΎΠ΄ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
app.quit();
} else {
// Π΅ΡΠ»ΠΈ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ, ΡΠΎ
app.on("second-instance", () => {
// ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΊΡΡ Π½Π° Π²ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
app.focus();
// Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π»ΠΎΠ³ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°
console.log("App is alredy running");
})
}
Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°Π·Π°ΠΏΡΡΠΊΠ°Π²ΡΠΎΡΠΎΠ³ΠΎΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
import { app, BrowserWindow } from "electron";
let myWindow = null;
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
app.quit();
} else {
app.on("second-instance", (event, commandLine, workingDirectory) => {
// ΠΊΠΎΠ³Π΄Π° ΠΊΡΠΎ-ΡΠΎ ΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore();
myWindow.focus();
}
});
// ΡΠΎΠ·Π΄Π°ΡΠΌ myWindow ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
app.on("ready", () => {
let window = new BrowserWindow({
width: 1280,
height: 720,
});
window.loadURL("https://google.com");
});
}
Π€ΡΠ½ΠΊΡΠΈΡ showAboutPanel()
ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΏΠ°Π½Π΅Π»Ρ ΠΎ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Π±Π΅Π· ΠΈΠ½ΡΡΠ°Π½ΡΠ° Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π°, Ρ Π½Π°Ρ Π²ΡΠΉΠ΄Π΅Ρ ΠΎΠΊΠ½ΠΎ ΠΎ Π²Π΅ΡΡΠΈΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π°
import { app } from "electron";
const lock = app.releaseSingleInstanceLock();
if (!lock) {
app.quit();
} else {
app.on("second-instance", () => {
if (win) {
win.focus();
}
})
}
app.whenReady().then(() => {
// ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΏΠ°Π½Π΅Π»Ρ ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅
app.showAboutPanel();
});
011 ΠΠΎΠ΄ΡΠ»Ρ BrowserWindow
ΠΠΎΠ΄ΡΠ»Ρ BrowserWindow
Ρ
ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
import { app, BrowserWindow } from "electron";
app.on("ready", () => {
let window = new BrowserWindow({
width: 1280,
height: 720,
});
// Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΡΠ΅ΡΡΡΡΠ°
window.loadURL("https://google.com");
});
Π£ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ loadFile()
ΡΠ΅Π½Π΄Π΅ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ· Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ ΡΠ°ΠΉΠ»Π°
app.on("ready", () => {
let window = new BrowserWindow({
width: 1280,
height: 720,
});
// ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ Π² ΠΎΠΊΠ½Π΅ Π½Π°ΡΠΈ ΡΡΡΠ°Π½ΠΈΡΡ
window.loadFile("renderer/index.html");
});
Π’Π°ΠΊ ΠΆΠ΅, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅ΡΠΈ (ΠΏΠΎ ΡΠΈΠΏΡ ΠΈΠΌΠΏΠΎΡΡΠΎΠ²) Π½Π° ΡΡΠΎΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°.
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π²Π΅Π±-Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ nodeIntegration
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠΌ ΠΈΠ· devtools.
ΠΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΎΠΏΡΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΏΡΠ΅Π»ΠΎΠ°Π΄ΠΎΠΌ
app.on("ready", () => {
let window = new BrowserWindow({
width: 1280,
height: 720,
// ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠ΅Ρ-ΠΏΡΠΎΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ node API
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
window.webContents.openDevTools();
});
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΠ»ΠΈΠΊΠ΅Ρ-ΡΡΡΠ΅ΠΊΡΠ° (ΡΡΡΠ΅ΠΊΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π½Π°Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡ ΡΠ°ΠΌΠ° HTML-ΡΡΡΡΠΊΡΡΡΠ°, Π° ΡΠΆΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°ΡΡΡΡ ΡΡΠΈΠ»ΠΈ). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΠΈΠ²Π΅Π½Ρ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΡΠ²Π΅Ρ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π° Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π±Π΅Π»ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ)
app.on("ready", () => {
let window = new BrowserWindow({
width: 1280,
height: 720,
// Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ ΡΡΠ°Π·Ρ
show: false,
// ΡΠΎΠ½ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ ΡΠΎΠΌΡ, ΡΡΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΈΠ»ΡΡ
backgroundColor: "#2c3e50",
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
// ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ
window.on("ready-to-show", () => {
// ... Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π΅Π³ΠΎ
window.show();
});
window.webContents.openDevTools();
});
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠΊΠ½Π° ΡΠ΅ΡΠ΅Π· ΠΌΠΎΠ΄ΡΠ»Ρ screen
, ΠΊΠΎΡΠΎΡΡΠΉ Ρ
ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΎΠΊΠ½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
import { app, screen, BrowserWindow } from "electron";
app.on("ready", () => {
// ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
const { width, height } = screen.getPrimaryDisplay().workAreaSize;
console.log(`${width} - ${height}`);
let window = new BrowserWindow({
width: 1280,
height: 720,
// ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π°
minHeight: 500,
minWidth: 500,
// ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π°
maxHeight: height < 1080 ? 1080 : height,
maxWidth: width,
show: false,
backgroundColor: "#2c3e50",
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
window.on("ready-to-show", () => {
window.show();
});
window.webContents.openDevTools();
});
ΠΠ°Π»ΡΡΠ΅ ΡΠΆΠ΅ ΠΈΠ΄ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
frame: false
- ΡΠΊΡΠΎΠ΅Ρ ΡΠ°ΠΌΠΊΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅titleBarStyle: "hidden"
- ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠΉΡΡΠ² (ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ Π΄Π»Ρ ΠΌΠ°ΠΊΠ°), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ ΡΠ°ΠΌΠΎΠΉ ΡΠ°ΠΌΠΊΠΈ
Π ΡΠ΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡΠΊΡΡΡΠ²Π΅Π½Π½ΡΡ Π΄ΡΠ°Π³-ΠΎΠ±Π»Π°ΡΡΡ, Π·Π° ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ Π½Π°Ρ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅Ρ Π²Π΅ΡΡ Π°
<div class="title-bar"></div>
.title-bar {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 30px;
background: #3498db;
// ΡΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π°Π΄Π΅Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ
-webkit-app-region: drag;
}
012 ΠΠΎΠ΄ΡΠ»Ρ Menu
Π‘ΡΠ°Π·Ρ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΡ Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ, Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠ²ΠΎΡ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Ρ Π½ΡΠ»Ρ.
ΠΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΡΠ°ΠΌΡΠΉ Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΈ Π΄Π»ΠΈΠ½Π½ΡΠΉ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°):
import { app, screen, BrowserWindow, Menu, MenuItem } from "electron";
app.on("ready", () => {
// ΡΠΎΠ·Π΄Π°ΡΠΌ Π½Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΠ°Π½Ρ ΠΌΠ΅Π½Ρ
const menu = new Menu();
// ΡΡΡ ΡΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΡ ΠΌΠ΅Π½Ρ Π² Π½Π°ΡΠ΅ ΠΌΠ΅Π½Ρ
menu.append(
// ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·Π΄Π΅Π», ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΡΠ°Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠ΅Π½Ρ
new MenuItem({
// Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Π°
label: "MyApp",
// ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ
submenu: [
// ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ
new MenuItem({
// ΠΈΠΌΡ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ
label: "Option 1",
// Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ
click() {
console.log("Option 1 clicked");
},
}),
// ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Π½ΡΠΠΉΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
new MenuItem({
// ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΡΠ½ΠΊΡΠΎΠ²
type: "separator",
}),
new MenuItem({
label: "Option 2",
click() {
console.log("Option 2 clicked");
},
}),
],
})
);
// ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΈΠ½ΡΡΠ°Π½Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΌΠ΅Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Menu.setApplicationMenu(menu);
let window = new BrowserWindow({
width: 1280,
height: 720,
show: false,
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
window.on("ready-to-show", () => {
window.show();
});
window.webContents.openDevTools();
});
Π’Π°ΠΊ ΠΆΠ΅ Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ, ΡΠ΅ΡΠ΅Π· Menu.buildFromTemplate([{}])
const menu = new Menu.buildFromTemplate([
{
label: "MyApp",
submenu: [
{
label: "option 1",
click() {
console.log("Option 1 is clicked");
},
},
{
type: "separator",
},
{
label: "option 2",
click() {
console.log("Option 2 is clicked");
},
},
],
},
]);
Π‘Π°ΠΌΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ½Π΅ΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½ Π² Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ°Π·Π²ΠΎΠ΄ΠΈΡΡ ΠΌΡΡΠΎΡΠΊΡ
Π’Π°ΠΊ ΠΆΠ΅ ΡΠ»Π΅ΠΊΡΡΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΌΠ΅Π½Ρ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
const menuTemplate = [
{
label: "MyApp",
submenu: [
{ role: "about" },
{ type: "separator" },
{ role: "services" },
{ role: "hide" },
{ role: "hideothers" },
{ role: "unhide" },
{ role: "quit" },
],
},
];
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
const menuTemplate = [
{
label: "MyApp",
submenu: [
{ role: "about" },
{ type: "separator" },
{ role: "services" },
{ role: "hide" },
{ role: "hideothers" },
{ role: "unhide" },
{ role: "quit" },
],
},
{
label: "MyMenu",
submenu: [
{
label: "Option 1",
click() {
console.log("Option 1");
},
},
],
},
];
Π ΡΡΡ ΡΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΠΠ
// ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ
const contextMenuTemplate = [
{ role: "about" },
{ type: "separator" },
{ label: "option 1" },
{ label: "option 2" },
];
// ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ
const contextMenu = new Menu.buildFromTemplate(contextMenuTemplate);
// ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°
const createWindow = () => {
let window = new BrowserWindow({
width: 1280,
height: 720,
show: false,
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
window.on("ready-to-show", () => {
window.show();
});
// ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ, Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΎΠ½ΠΎ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ
window.webContents.on("context-menu", (e, params) => {
contextMenu.popup(window, params.x, params.y);
});
};
013 ΠΠΎΠ΄ΡΠ»Ρ Tray
ΠΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΡΡΠ΅Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² Π²Π΅Π±ΠΏΠ°ΠΊ Π»ΠΎΠ°Π΄Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π½Π°Ρ Π²ΡΠ²ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ.
npm install file-loader --save-dev
module.exports = {
renderer: {
entry: "./src/renderer/javascripts/index.js",
},
preload: {
entry: "./src/preload/index.js",
},
main: {
entry: "./src/main/index.js",
//
module: {
rules: [
// Π½Π°Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ Π»ΠΎΠ°Π΄Π΅ΡΠ°
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
// Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π»ΠΎΠ°Π΄Π΅Ρ
loader: "file-loader",
options: {
// ΠΏΠ°ΡΡΠ΅ΡΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
name: "[path][name].[ext]",
},
},
],
},
],
},
},
};
ΠΠΎ ΡΡΡΠΈ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π²Π΅Π±ΠΏΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π» ΡΠ°ΠΉΠ» ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ Ρ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΡΠΈΠΊΡ Template
, ΡΡΠΎΠ±Ρ Π½Π° ΠΌΠ°ΠΊ-ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
ΠΈΠΊΠΎΠ½ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ»Π° ΡΠ²ΠΎΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ
ΠΠ°Π»ΡΡΠ΅ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΈΠ½ΡΡΠ°Π½Ρ ΡΡΠ΅Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π²Ρ ΠΎΠ΄Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ
import path from "path";
import { app, BrowserWindow, Tray } from "electron";
import icon from "trayTemplate.png";
const createWindow = () => {
// new Tray() - Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΠΊΠΎΠ½ΠΊΡ Π² ΡΡΠ΅Π΅
// ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· path.resolve ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΈΠΊΠΎΠ½ΠΊΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
const tray = new Tray(path.resolve(__dirname, icon));
// ΠΡΠ²Π΅Π΄Π΅Ρ ΡΠ΅ΠΊΡΡ ΠΏΡΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡ
tray.setToolTip("Electron Application");
tray.on("click", () => {
window.isVisible() ? window.hide() : window.show();
});
let window = new BrowserWindow({
width: 1280,
height: 720,
show: false,
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
window.on("ready-to-show", () => {
window.show();
});
};
app.on("ready", () => {
createWindow();
});
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ°ΠΌΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠ΅Π΅, Π΅Π³ΠΎ ΡΡΠ»ΡΠΈΠΏ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ²Π΅ΡΠ°Π½Π° Π½Π° ΡΡΠ»ΡΠΈΠΏ. Π’Π°ΠΊ ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΠ΅ ΠΊΠ»ΠΈΠΊΠΈ ΠΌΡΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ΅Π½ΡΡΠΊΡ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΡΠ΅Ρ:
import path from "path";
import { app, BrowserWindow, Tray, Menu } from "electron";
import icon from "trayTemplate.png";
const createWindow = () => {
// ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠ΅Ρ
const trayMenu = new Menu.buildFromTemplate([
{
label: "Toggle App",
click: () => {
window.isVisible() ? window.hide() : window.show();
},
},
{
role: "quit",
},
]);
const tray = new Tray(path.resolve(__dirname, icon));
// ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠ΅Ρ
tray.setContextMenu(trayMenu);
tray.setToolTip("Electron Application");
tray.on("click", () => {
window.isVisible() ? window.hide() : window.show();
});
let window = new BrowserWindow({
width: 1280,
height: 720,
show: false,
webPreferences: {
nodeIntegration: true,
},
});
window.loadFile("renderer/index.html");
window.on("ready-to-show", () => {
window.show();
});
};
app.on("ready", () => {
createWindow();
});
ΠΠ° ΠΠΠ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠ³Π»ΠΈΡΡΡ, Π½Π° ΠΠΠ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΠΊΠ°