实现效果
目录结构
index.html
html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<!-- 内容安全策略-->
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self'"
/>
<meta
http-equiv="X-Content-Security-Policy"
content="default-src 'self'; script-src 'self'"
/>
<!--窗口标题-->
<title>你好,Electron!</title>
</head>
<body>
<h1>你好,Electron!</h1>
<p>👋</p>
<p id="info"></p>
</body>
<!-- 加载渲染进程的 renderer.js 文件 -->
<script src="./renderer.js"></script>
</html>
main.js
javascript
//引入electron模块 app, BrowserWindow
const {app, BrowserWindow} = require('electron/main') //引入electron模块, app
const path = require('node:path') //引入path模块
//创建窗口
const createWindow = () => {
const win = new BrowserWindow({
//设置窗口大小 宽度800 高度600
width: 800,
height: 600,
webPreferences: { //网页设置
preload: path.join(__dirname, 'preload.js') //设置预加载脚本
}
})
//加载index.html
win.loadFile('index.html')
}
//当Electron完成初始化并且准备创建窗口时调用createWindow()
app.whenReady().then(() => {
//在应用准备就绪时调用函数
createWindow()
//如果没有窗口打开则打开一个窗口 (macOS) 这个是必须处理的兼容性问题
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})
/**
* 关闭所有窗口时退出应用 (Windows & Linux) 这个是必须处理的兼容性问题。
* 这段代码是用于Electron框架中的事件监听,具体是监听window-all-closed事件。这个事件会在所有窗口都被关闭时触发。
* 代码中的逻辑是,如果当前操作系统平台不是macOS('darwin'),则在所有窗口关闭后退出应用程序。
* */
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit()
})
preload.js
javascript
/**
* 预加载脚本在加载"index.html"之前运行在渲染器中。
* 它可以访问Web API以及Electronic的渲染器处理模块和一些多边填充Node.Js功能。
* https://www.electronjs.org/docs/latest/tutorial/sandbox
*/
// 引入electron模块,contextBridge用于暴露接口到主进程
const { contextBridge } = require('electron/renderer')
// 在主进程暴露接口,接口名为versions,返回当前Node.js、Chrome和Electron的版本号
contextBridge.exposeInMainWorld('versions', {
node: () => process.versions.node, // 返回Node.js版本号
chrome: () => process.versions.chrome, // 返回Chrome版本号
electron: () => process.versions.electron // 返回Electron版本号
})
renderer.js
javascript
//这个文件是renderer进程的入口文件,负责渲染页面的显示。
//获取info节点
const information = document.getElementById('info')
//改变info节点的文本内容,显示当前应用的版本信息,包括Chrome、Node.js和Electron的版本号,并显示在info节点中。
information.innerText = `这个应用使用了 Chrome (v${window.versions.chrome()}), Node.js (v${window.versions.node()}), and Electron (v${window.versions.electron()})`
styles.css
css
//这里没有代码