为了账号安全,请及时绑定邮箱和手机立即绑定

electron 笔记 02 进程间通讯

标签:
JavaScript

主进程与渲染进程

图片描述

方式一 ipc

main.js

const {app, BrowserWindow, ipcMain} = require('electron')

app.on('ready',()=>{
    // require('devtron').install()
    let mainWindow = new BrowserWindow({
        width: 1600,
        height: 1200,
        webPreferences:{
            // 注入node模块
            nodeIntegration: true,
            contextIsolation: false
        }
    })

    mainWindow.loadFile('index.html')
    mainWindow.webContents.openDevTools()
    ipcMain.on('msg',(event,arg)=>{
        // console.log(event)
        console.log(arg)
        event.reply('msgMain','hello from main process')
    })
})

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <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>Hello World!</title>
</head>
<body>
<h1>Hello Electron!</h1>
<br>
<button id="send">send to main</button>

<script src="renderer.js"></script>
</body>
</html>

renderer.js

const { ipcRenderer} = require('electron')
window.addEventListener('DOMContentLoaded',()=>{
    document.getElementById('send').addEventListener('click',()=>{
        ipcRenderer.send('msg','hello from renderer')
    })
    ipcRenderer.on('msgMain',(event,arg)=>{
        // console.log(event)
        console.log(arg)
    })
})

效果

点击界面的按钮
图片描述

命令行控制台
图片描述

开发者工具控制台
图片描述

方式二 remote

main.js

const {app, BrowserWindow, ipcMain} = require('electron')

app.on('ready',()=>{
    // require('devtron').install()
    let mainWindow = new BrowserWindow({
        width: 1600,
        height: 1200,
        webPreferences:{
            // 注入node模块
            nodeIntegration: true,
            contextIsolation: false,
            enableRemoteModule: true
        }
    })

    mainWindow.loadFile('index.html')
    mainWindow.webContents.openDevTools()
    ipcMain.on('msg',(event,arg)=>{
        // console.log(event)
        console.log(arg)
        event.reply('msgMain','hello from main process')
    })
})

renderer.js

const {ipcRenderer} = require('electron')
const {BrowserWindow} = require('electron').remote
window.addEventListener('DOMContentLoaded', () => {
    document.getElementById('send').addEventListener('click', () => {
        ipcRenderer.send('msg', 'hello from renderer')

        let subWindow = new BrowserWindow({
            width: 400,
            height: 300,
            webPreferences: {
                // 注入node模块
                nodeIntegration: true
            },
            // 模态
            modal: true
        })

        subWindow.loadFile('two.html')
    })
    ipcRenderer.on('msgMain', (event, arg) => {
        // console.log(event)
        console.log(arg)
    })
})

效果

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消