# Electron 笔记

# 1. 创建项目

  1. 从 github 上面克隆最新的项目模板

    // 在目标文件夹下
    git clone https://github.com/electron/electron-quick-start
    
    1
    2
  2. 安装项目中的依赖项

    cd electron-quick-start
    npm install
    # 或
    cnpm install
    
    1
    2
    3
    4
  3. 启动项目

    npm start
    
    1

# 2. 基础配置

  1. 在 main.js 中增加全局使用 nodejs

    const mainWindow = new BrowserWindow({
        width: w,
        height: h,
        webPreferences: {
        nodeIntegration: true,  // 增加全局使用 node.js
        preload: path.join(__dirname, 'preload.js')
        }
    })
    
    1
    2
    3
    4
    5
    6
    7
    8

# 3. 功能模块

# 3.1. 选择文件/文件夹

<button id="open">open file</button>
<img id="img" />
1
2
const { dialog } = require('electron').remote

let open = document.getElementById('open');
open.onclick = function () {
    dialog.showOpenDialog({
        title: '选择文件夹',
        // defaultPath: 'D:/PersonalProject/vue_press/docs/pages/images/',
        filters: [{ name: '图片', extensions: ['jpg', 'png'] }],
        buttonLabel: '选择文件夹',
        // properties: ['openFile', 'openDirectory']
    }).then(result => {
        let img = document.getElementById('img');
        img.setAttribute('src', result.filePaths[0]);
    }).catch(err => {
        console.log(err);
    })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 3.2. 保存文件

<button id="save">save file</button>
1
const fs = require('fs')
const { dialog } = require('electron').remote

// 保存文件
let save = document.getElementById('save');
save.onclick = function () {
    dialog.showSaveDialog({
        title: '保存文件',
        defaultPath: 'D:/PersonalProject/Aniku_electron/cache/'
    }).then(result => {
        fs.writeFileSync(result.filePath, 'avc');
    }).catch(err => {
        console.log(err);
    })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 3.3. 消息提示,类似于 alert

<button id="message">show message</button>
1
const { dialog } = require('electron').remote

// 消息提示
let message = document.getElementById('message');
message.onclick = function () {
    dialog.showMessageBox({
        type: 'warning',  // none, info, error, warning, question
        title: '123',
        message: '456',
        buttons: ['a', 'b']
    }).then(result => {
        console.log(result);
    })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3.4. 系统通知:win10 通知栏

<button id="notify">notify</button>
1
// 系统通知
let notify = document.getElementById('notify');
let options = {
    title: 'notify',
    body: '你有一条通知'
}
notify.onclick = function () {
    new window.Notification(options.title, options)
}
1
2
3
4
5
6
7
8
9

# 3.5. 读取 Json 文件

<button id="get">get info</button>
<div id="data"></div>
1
2
// 读取 json 文件
let input = document.getElementById('get');
let data1 = document.getElementById('data');
input.onclick = function () {
    let json = require('D:/PersonalProject/Aniku_electron/cache/test.json');
    data1.innerHTML = json.name
}
1
2
3
4
5
6
7

# 3.6. 调用默认应用打开文件

<button id="exe">open exe</button>
1
const { shell } = require('electron')

// 打开文件
let exe = document.getElementById('exe');
exe.onclick = function(){
    shell.openPath('D:/PersonalProject/Aniku_electron/test.txt');
}
1
2
3
4
5
6
7

# 3.7. 网络状态监听

// 网络状态监听
window.addEventListener('online', function(){
    options.title = '网络链接';
    options.body = '网络已连接';
    new window.Notification(options.title, options);
})
window.addEventListener('offline', function(){
    options.title = '网络链接';
    options.body = '网络已断开';
    new window.Notification(options.title, options);
})
1
2
3
4
5
6
7
8
9
10
11
lastUpdate: 3/30/2023, 2:14:30 PM