创建第一个应用
创建 BrowserWindow
| npm install nodemon --save-dev
|
修改package.json
| "scripts": {
"start": "electron .",
"watch": "nodemon --watch main.js --exec 'electron .'"
},
|
执行npm run watch
然后开始写代码啦
https://electronjs.org/docs/api/browser-window
| const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
})
|
这样就启动了一个高 800,宽 600 的窗口
loadFile
index.html
| <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
|
1
2
3
4
5
6
7
8
9
10
11
12 | const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('index.html')
})
|
second.html
| <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>this is 2nd window</h1>
</body>
</html>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('index.html')
const secondWindow = new BrowserWindow({
width: 400,
height: 300,
webPreferences: {
nodeIntegration: true
}
})
secondWindow.loadFile('second.html')
})
|
在secondWindow
中添加parent: mainWindow
,那么在关闭mainWindow
时,secondWindow
也会被关闭
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | const { app, BrowserWindow } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('index.html')
const secondWindow = new BrowserWindow({
width: 400,
height: 300,
webPreferences: {
nodeIntegration: true
},
parent: mainWindow
})
secondWindow.loadFile('second.html')
})
|
renderer.js
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13 | <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
<script>
require('./renderer.js')
</script>
</html>
|
renderer.js
| // This file is required by the index.html file and will
// be executed in the renderer process for that window.
// No Node.js APIs are available in this process because
// `nodeIntegration` is turned off. Use `preload.js` to
// selectively enable features needed in the rendering
// process.
alert(process.versions.node)
|
| alert(process.versions.node)
window.addEventListener('DOMContentLoaded', () => {
alert('greeting from the DOM side')
})
|
进程间通信
renderer.js
| const { ipcRenderer } = require('electron')
window.addEventListener('DOMContentLoaded', () => {
ipcRenderer.send('message', 'hello from renderer')
})
|
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | const { app, BrowserWindow, ipcMain } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('index.html')
ipcMain.on('message', (event, arg) => {
console.log(arg)
})
})
// hello from renderer
|
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
<p id="message"></p>
</body>
<script>
require('./renderer.js')
</script>
</html>
|
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | const { app, BrowserWindow, ipcMain } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('index.html')
ipcMain.on('message', (event, arg) => {
console.log(arg)
event.sender.send('reply', 'hello from main')
})
})
|
renderer.js
| const { ipcRenderer } = require('electron')
window.addEventListener('DOMContentLoaded', () => {
ipcRenderer.send('message', 'hello from renderer')
ipcRenderer.on('reply', (event, arg) => {
document.getElementById('message').innerHTML = arg
})
})
|
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | const { app, BrowserWindow, ipcMain } = require('electron')
app.on('ready', () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('index.html')
ipcMain.on('message', (event, arg) => {
console.log(arg)
// event.sender.send('reply', 'hello from main')
mainWindow.send('reply', 'hello from main')
})
})
|