Shu-How Zの小窝

Loading...

Electron免费视频教程-从基础到实战

Electron免费视频教程-从基础到实战

Electron基础:https://www.bilibili.com/video/BV177411s7Lt

1 2

01_课程介绍和Electron简介_

electron e lai 存

02_Electron开发环境搭建

npm install electron -D

npx electron -v
v41.3.0

视频v8.x

03_Electron编写一个HelloWorld

electron .
main.js

 var electron = require('electron');
 var app = electron.app; //引用app
 var BrowserWindow = electron.BrowserWindow; //窗口引用

 var mainWindow = null; // 声明要打开的主窗口

 app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width: 800,
        height: 800,
    });
    mainWindow.loadFile('index.html'); // 加载index.html
    mainWindow.on('closed',()=>{
        mainWindow = null; // 关闭窗口时,清空窗口对象
    });
 })

04_Electron编写邀请小姐姐程序

05_Electron中Remote模块讲解

const BrowerWindow=require('electron').remote.BrowerWindow

https://wizardforcel.gitbooks.io/electron-doc/content/index.html

remote错误解决: https://blog.csdn.net/LIangell/article/details/122192709

main.js
 var electron = require('electron');
 var app = electron.app; //引用app
 var BrowserWindow = electron.BrowserWindow; //窗口引用

 var mainWindow = null; // 声明要打开的主窗口

 app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width: 800,
        height: 800,
        webPreferences: {
            enableRemoteModule: true, // 允许使用remote模块
            webSecurity:false, // 禁用Web安全策略
            nodeIntegration: true, // 允许在渲染进程中使用Node.js API
            contextIsolation: false // 禁用上下文隔离
        }
    });
    mainWindow.loadFile('index.html'); // 加载index.html
    require('@electron/remote/main').initialize()  //添加语句
    require('@electron/remote/main').enable(mainWindow.webContents) //添加语句
    mainWindow.on('closed',()=>{
        mainWindow = null; // 关闭窗口时,清空窗口对象
    });
 })
index.js
const btn=this.document.querySelector('#btn');
const { BrowserWindow } = require('@electron/remote')


window.onload=function(){
    btn.onclick=function(){
        newWindow = new BrowserWindow({
            width: 800,
            height: 600,
        });
        newWindow.loadFile('red.html');
        newWindow.on('closed',()=>{
            newWindow=null;
        });
    }  
}

06_Electron中菜单的创建和绑定事件

main.js
 var electron = require('electron');
 var app = electron.app; //引用app
 var BrowserWindow = electron.BrowserWindow; //窗口引用

 var mainWindow = null; // 声明要打开的主窗口

 app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width: 800,
        height: 800,
        webPreferences: {
            enableRemoteModule: true, // 允许使用remote模块
            webSecurity:false, // 禁用Web安全策略
            nodeIntegration: true, // 允许在渲染进程中使用Node.js API
            contextIsolation: false // 禁用上下文隔离
        }
    });
    require('./main/menu.js'); // 引入菜单模块
    mainWindow.loadFile('index.html'); // 加载index.html
    require('@electron/remote/main').initialize()  //添加语句
    require('@electron/remote/main').enable(mainWindow.webContents) //添加语句
    mainWindow.on('closed',()=>{
        mainWindow = null; // 关闭窗口时,清空窗口对象
    });
 })
menu.js
const {Menu,BrowserWindow} = require('electron');

const template = [
    {
        label:'广州',
        submenu:[
            {
                label:'天河',
                click:()=>{
                    let win = new BrowserWindow({
                        width: 800,
                        height: 600,
                        webPreferences: {
                            nodeIntegration: true, // 允许在渲染进程中使用Node.js API
                            contextIsolation: false // 禁用上下文隔离
                        }
                    });
                    win.loadFile('red.html');
                    win.on('closed',()=>{
                        win=null;
                    });
                }
            },
            {
                label:'越秀'
            }
        ]
    },
    {
        label:'茂名',
    }
]

var menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);

07_Electron中右键菜单的制作

https://blog.csdn.net/qq_37325972/article/details/124130483

main.js
 var electron = require('electron');
 var app = electron.app; //引用app
 var BrowserWindow = electron.BrowserWindow; //窗口引用

 var mainWindow = null; // 声明要打开的主窗口

 app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width: 800,
        height: 800,
        webPreferences: {
            enableRemoteModule: true, // 允许使用remote模块
            webSecurity:false, // 禁用Web安全策略
            nodeIntegration: true, // 允许在渲染进程中使用Node.js API
            contextIsolation: false // 禁用上下文隔离
        }
    });
    mainWindow.webContents.openDevTools(); // 打开开发者工具
    require('./main/menu.js'); // 引入菜单模块
    mainWindow.loadFile('index.html'); // 加载index.html
    require('@electron/remote/main').initialize()  //添加语句
    require('@electron/remote/main').enable(mainWindow.webContents) //添加语句
    mainWindow.on('closed',()=>{
        mainWindow = null; // 关闭窗口时,清空窗口对象
    });
 })
render/index.js
const btn=this.document.querySelector('#btn');
const remote = require("@electron/remote")
const { BrowserWindow, } = remote

window.onload=function(){
    btn.onclick=function(){
        newWindow = new BrowserWindow({
            width: 800,
            height: 600,
        });
        newWindow.loadFile('red.html');
        newWindow.on('closed',()=>{
            newWindow=null;
        });
    }  
}

let rightTemplete=[
    {label:'粘贴',accelerator:'Ctrl+V'},
    {label:'复制',accelerator:'Ctrl+C'},
]
let m=remote.Menu.buildFromTemplate(rightTemplete);
window.addEventListener('contextmenu',(e)=>{
    e.preventDefault();
    m.popup({window:remote.getCurrentWindow()});
})

08_Electron中通过链接打开浏览器

render/index.js
const aHref=this.document.querySelector('#aHref');
const { shell } = require('electron');
aHref.onclick=function(e){
    e.preventDefault();
    let url=aHref.getAttribute('href');
    shell.openExternal(url);
}

html
    <a id="aHref" href="http://jspang.com">jspang.com</a>

09_Electron中嵌入网页和打开子窗口

main.js
 var electron = require('electron');
 var app = electron.app; //引用app
 var BrowserWindow = electron.BrowserWindow; //窗口引用

 var mainWindow = null; // 声明要打开的主窗口

 app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width: 800,
        height: 800,
        webPreferences: {
            enableRemoteModule: true, // 允许使用remote模块
            webSecurity:false, // 禁用Web安全策略
            nodeIntegration: true, // 允许在渲染进程中使用Node.js API
            contextIsolation: false // 禁用上下文隔离
        }
    });
    mainWindow.webContents.openDevTools(); // 打开开发者工具
    require('./main/menu.js'); // 引入菜单模块
    mainWindow.loadFile('index.html'); // 加载index.html
    require('@electron/remote/main').initialize()  //添加语句
    require('@electron/remote/main').enable(mainWindow.webContents) //添加语句

    // BrowserView
    var BrowserView=electron.BrowserView;
    var view=new BrowserView();
    mainWindow.setBrowserView(view);
    view.setBounds({x:0,y:120,width:800,height:300});
    view.webContents.loadURL('https://www.bilibili.com/');
    // window.open browserWindow
    mainWindow.on('closed',()=>{
        mainWindow = null; // 关闭窗口时,清空窗口对象
    });
 })

10_Electron子窗口向父窗口传递信息

render/index.js
    <button id="childBtn">打开子窗口</button>
    <div id="mytext"></div>
const childBtn=this.document.querySelector('#childBtn');
childBtn.onclick=function(){
    window.open('./popup.html')
}
window.addEventListener('message',(e)=>{
    document.querySelector('#mytext').innerHTML=JSON.stringify(e.data);
})

popup.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=`">
    <title>子窗口</title>
</head>
<body>
    <h1>这是一个子窗口</h1>
    <button id="btn">向父窗口发送消息</button>
</body>
<script>
    var btn=document.querySelector('#btn');
    btn.addEventListener('click',function(){
        window.opener.postMessage('我是子窗口传递过来的信息');
    })
</script>
</html>

11_Electron选择文件对话框使用

render/index.js
    <button id="selectImg">选择图片</button>
    <img style="width:100%;height:auto;" id="showImg">

const remote = require("@electron/remote")
const selectImg=this.document.querySelector('#selectImg');
selectImg.onclick=function(){
    remote.dialog.showOpenDialog({
        title: '选择图片',
        // defaultPath: 'xiao.jpg',
        filters: [
            { name: 'Images', extensions: ['jpg', 'png', 'gif'] }
        ],
        buttonLabel: '选择图片',
    }).then(result => {
        let img = document.querySelector('#showImg');
        img.src = result.filePaths[0];
    }).catch(err => {
        console.log(err);
    })
}

12_Electron保存文件对话框使用

<button id="saveBtn">保存文件</button>
const remote = require("@electron/remote")
const fs = require('fs');
const saveBtn=this.document.querySelector('#saveBtn');
saveBtn.onclick=function(){
    remote.dialog.showSaveDialog({
        title: '保存文件',
    }).then(result => {
        fs.writeFileSync(result.filePath, 'Hello, Electron!');
    }).catch(err => {
        console.log(err);
    })
}

13_Electron消息对话框操作

<button id="msgBtn">消息对话框</button>
const remote = require("@electron/remote")
const msgBtn=this.document.querySelector('#msgBtn');
msgBtn.onclick=function(){
    remote.dialog.showMessageBox({
        type: 'warning',
        title: '消息对话框',
        message: '这是消息对话框的内容。',
        buttons: ['确定', '取消']
    }).then(result => {
        console.log(result);
    }).catch(err => {
        console.log(err);
    })
}

14_Electron断网提醒功能制作

<script>
    window.addEventListener('online', () => {
        alert('网络已连接');
    });
    window.addEventListener('offline', () => {
        alert('网络已断开');
    });
</script>

15_Electron底部通知消息制作

<button id="notifyBtn">通知</button>
const notifyBtn=this.document.querySelector('#notifyBtn');
let option={
    title:'这是通知的标题',
    body:'这是通知的内容',
}
notifyBtn.onclick=function(){
    new window.Notification(option.title,option);
}

16_Electron注册全局快捷键

 var electron = require('electron');
 var app = electron.app; //引用app
 var BrowserWindow = electron.BrowserWindow; //窗口引用

 var globalShortcut = electron.globalShortcut; //全局快捷键引用

 var mainWindow = null; // 声明要打开的主窗口

 app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width: 800,
        height: 800,
        webPreferences: {
            enableRemoteModule: true, // 允许使用remote模块
            webSecurity:false, // 禁用Web安全策略
            nodeIntegration: true, // 允许在渲染进程中使用Node.js API
            contextIsolation: false // 禁用上下文隔离
        }
    });

    globalShortcut.register('ctrl+e',()=>{
        // mainWindow.loadUrl('https://www.bilibili.com/');
        mainWindow.loadFile('red.html');
    });
    let isRegister=globalShortcut.isRegistered('ctrl+e')?'注册成功':'注册失败';
    console.log(isRegister);


    mainWindow.webContents.openDevTools(); // 打开开发者工具
    require('./main/menu.js'); // 引入菜单模块
    mainWindow.loadFile('index.html'); // 加载index.html
    require('@electron/remote/main').initialize()  //添加语句
    require('@electron/remote/main').enable(mainWindow.webContents) //添加语句

    // BrowserView
    // var BrowserView=electron.BrowserView;
    // var view=new BrowserView();
    // mainWindow.setBrowserView(view);
    // view.setBounds({x:0,y:120,width:800,height:300});
    // view.webContents.loadURL('https://www.bilibili.com/');
    // window.open browserWindow
    mainWindow.on('closed',()=>{
        mainWindow = null; // 关闭窗口时,清空窗口对象
    });
 })

 app.on('will-quit',()=>{
    globalShortcut.unregister('ctrl+e'); // 注销快捷键
    globalShortcut.unregisterAll(); // 注销所有快捷键 
})

17_剪切板功能的使用

    <p>激活码: <span id="code">XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</span></p>
    <button id="cBtn">复制激活码</button>

const remote = require("@electron/remote")
// var electron = require('electron');
//electron.clipboard
const cBtn=this.document.querySelector('#cBtn');
cBtn.onclick=function(){
    let code=document.querySelector('#code').innerText;
    remote.clipboard.writeText(code);
    alert('激活码已复制到剪贴板');
}
posted @ 2026-05-01 20:21  KooTeam  阅读(5)  评论(0)    收藏  举报