进程之间通信(老办法不建议使用)
这样需要 安装 remote,我这里演示在渲染进程里面创建窗口。新办法建议,所有的窗口都在主进程里面创建。
yarn add --dev @electron/remote
主进程 main.js
const {app,BrowserWindow} = require('electron');
// 第一步:引入remote
const remote = require('@electron/remote/main');
// 第二步: 初始化remote
remote.initialize();
// 创建一个窗口函数
function createWindow () {
// 实例化一个窗口对象
let win=new BrowserWindow({
// 设置窗口的大小
width:800,
height:400,
// 让窗口不显示
show:false,
webPreferences:{
// 开启渲染进程能使用node,新版本还要将上下文设置为false
nodeIntegration:true,
contextIsolation:false,
//旧版本只需增加这一配置,将新版本的三步去掉
//enableRemoteModule:true
}
})
// 加载页面
win.loadFile("index.html");
// 等页面加载完,在显示窗口
win.on("ready-to-show",()=>{
win.show();
});
// 窗口关闭
win.on("close",()=>{
console.log("窗口关闭1");
win=null;
});
// 第三步: 开启remote服务
remote.enable(win.webContents);
}
// 渲染窗口页面
app.whenReady().then(()=>{
createWindow()
ipcMain.on('set-title', (event, title) => {
const webContents = event.sender
const win = BrowserWindow.fromWebContents(webContents)
win.setTitle(title)
//回复数据
event.reply('shou', 'pong')
})
})
// 关闭应用程序
app.on("window-all-closed",()=>{
// 退出应用
app.quit();
});
渲染进程 js
// 引入remote远程操作窗口,新版本需要下载@electron/remote
const {BrowserWindow} = require('@electron/remote');
const remote = require('electron');
let ipcRenderer=remote.ipcRenderer
ipcRenderer.on('shou', (e, data) => {
console.log(111,e,data);
})
// 当页面节点加载完才进行操作
window.addEventListener("DOMContentLoaded",()=>{
// 点击按钮打开一个新窗口
let btn=document.querySelector("#btn");
btn.addEventListener("click",()=>{
// 创建一个新窗口
let win=new BrowserWindow({
width:400,
height:200
})
// 加载新页面
win.loadFile("list.html");
win.on("close",()=>{
win=null;
});
ipcRenderer.send('set-title', '我是李志立')
})
})