赞
踩
Electron 应用由两个主要部分组成:主进程和渲染进程。这两个进程各自有不同的职责和功能,但它们通过 IPC(进程间通信)机制进行交互。
主进程(Main Process)是 Electron 应用的入口。它负责管理应用的生命周期、创建和管理窗口,以及处理与操作系统的交互。每个 Electron 应用只有一个主进程。
const { app, BrowserWindow } = require('electron'); let mainWindow; const createWindow = () => { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js') // 指定预加载脚本 } }); mainWindow.loadFile('index.html'); }; app.on('ready', createWindow); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } });
渲染进程(Renderer Process)负责显示和渲染应用的用户界面。每个 Electron 窗口都有一个独立的渲染进程,运行在 Chromium 的沙盒环境中。
<!DOCTYPE html>
<html>
<head>
<title>Hello Electron</title>
</head>
<body>
<h1>Hello, Electron!</h1>
<script>
window.electronAPI.sendMessage('Hello from renderer');
</script>
</body>
</html>
主进程在 Electron 应用中扮演着核心角色,负责管理应用的整个生命周期,并与操作系统进行交互。
主进程管理应用的启动、退出等生命周期事件。
app.on('ready', createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('before-quit', () => {
// 清理工作
});
主进程负责创建和管理应用的所有窗口,可以根据需要创建多个窗口。
const createWindow = () => {
let win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js') // 指定预加载脚本
}
});
win.loadFile('index.html');
};
app.on('ready', createWindow);
主进程可以访问 Node.js API 和操作系统的原生功能,例如文件系统、通知、剪贴板等。
const { Notification } = require('electron');
const showNotification = () => {
new Notification({
title: 'Hello',
body: 'This is a notification'
}).show();
};
app.on('ready', showNotification);
渲染进程主要负责渲染用户界面和处理用户交互。它运行在 Chromium 环境中,具有完整的浏览器功能。
渲染进程将 HTML 和 CSS 转换为用户界面,显示在应用窗口中。
<!DOCTYPE html>
<html>
<head>
<title>Hello Electron</title>
<style>
body { font-family: Arial, sans-serif; }
h1 { color: #333; }
</style>
</head>
<body>
<h1>Hello, Electron!</h1>
</body>
</html>
渲染进程处理用户的输入和交互,如鼠标点击、键盘输入等。
<!DOCTYPE html> <html> <head> <title>Counter</title> </head> <body> <button id="counterBtn">Click me</button> <p id="count">0</p> <script> let count = 0; document.getElementById('counterBtn').addEventListener('click', () => { count++; document.getElementById('count').innerText = count; }); </script> </body> </html>
渲染进程通过 IPC(进程间通信)机制与主进程通信,发送和接收消息。
主进程:
const { ipcMain } = require('electron');
ipcMain.on('message', (event, arg) => {
console.log(arg); // 输出 'Hello from renderer'
event.reply('reply', 'Hello from main');
});
渲染进程:
<!DOCTYPE html>
<html>
<head>
<title>IPC Example</title>
</head>
<body>
<h1>Check the console</h1>
<script>
//这里通过预加载脚本里暴露出的全局属性进行通信
</script>
</body>
</html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。