首页 > 系统相关 >20、electron 主进程与渲染进程之间的通讯ipcMain

20、electron 主进程与渲染进程之间的通讯ipcMain

时间:2022-12-20 10:11:07浏览次数:38  
标签:20 render electron ipcMain 进程 message main mainWindow

1、主进程代码

 1 let electron = require('electron')
 2 const {ipcMain,BrowserWindow} = require('electron')
 3 
 4 let app = electron.app   //引用APP
 5 let mainWindow = null;  //声明要打开的主窗口
 6 
 7 app.on('ready',()=>{
 8     mainWindow = new BrowserWindow({
 9         width:800,
10         height:800,
11         webPreferences:
12         {
13             nodeIntegration:true,
14             contextIsolation:false,
15             enableRemoteModule: true,  //允许使用remote模块
16         }
17     });
18 
19     require("@electron/remote/main").initialize();  //初始化remote模块
20     require("@electron/remote/main").enable(mainWindow.webContents);  //
21 
22     
23     mainWindow.loadFile('ipc通讯.html');
24 
25     setTimeout(() => {
26         mainWindow.webContents.send("main-to-render-message","启动完成了");
27     }, 3000);
28 
29     
30     mainWindow.on('closed',()=>{
31         mainWindow = null;   //关闭窗口释放资源
32     });
33 
34 });
35 
36 app.on("will-quit",()=>{
37     globalShortcut.unregister("ctrl+y");   //取消注册快捷键
38     globalShortcut.unregisterAll();
39 });
40 
41 // 接收从渲染进程发送到主进程的消息
42 ipcMain.on("render-to-main-message",(event,message)=>{
43     // 在控制台上打印一下
44     console.log(`receive message from render: ${message}`);
45  
46     // 回复消息
47     event.reply("main-to-render-message", `来自主进程:我收到了你的消息“${message}”`);
48 
49 });
50 
51 // 接收同步消息
52 ipcMain.on("render-to-main-message-sync", (event, message) => {
53  
54     // 控制台打印一下知道来了
55     console.log(`receive sync message from render: ${message}`);
56  
57     // 回复渲染进程的同步消息
58     event.returnValue = `来自主进程:我收到了你的消息“${message}”`;
59 });
View Code

2、渲染进程代码

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7     <title>Document</title>
 8 </head>
 9 <body>
10     <input type="text" id="message">
11     <button onclick="sendMessageToMainProcess()">发送消息给主进程</button>
12 
13     <script>
14         const electron = require("electron");
15         
16         // 接收主进程发来的消息
17         // 第一个参数是约定的事件的名称
18         // 第二个参数是处理事件的callback
19         electron.ipcRenderer.on("main-to-render-message", (event, message) => {
20             alert(message);
21         });
22 
23         // 向主进程发送消息
24         function sendMessageToMainProcess() {
25             const message = document.getElementById("message").value;
26 
27             // 第一个参数是约定的事件的名称,主进程要监听这个事件
28             // 第二个及之后的参数是要发送的具体的消息
29             electron.ipcRenderer.send("render-to-main-message", message);
30 
31             // 发送同步消息
32             const replayMessage = electron.ipcRenderer.sendSync("render-to-main-message-sync", message);
33             alert(replayMessage);
34         }
35     </script>
36 </body>
37 </html>
View Code

 

参考:https://www.electronjs.org/zh/docs/latest/api/ipc-main

https://www.cnblogs.com/cc11001100/p/14290450.html

 

标签:20,render,electron,ipcMain,进程,message,main,mainWindow
From: https://www.cnblogs.com/handsomeziff/p/16993626.html

相关文章

  • 记一次 windows server 2012R2 上安装 MSSQL2005 及网站发布
    背景:原因是因为没有购买新的数据库授权。由于之前服务器是windows2003 由于后绪网站的版本可能会升到.net4.5 据说2003上安装不起所有由另一同事到客户安装一个window......
  • Kafka快速上手(2017.9官方翻译)
    为了帮助国人更好了解、上手kafka,特意翻译、修改了个文档。官方Wiki: http://kafka.apache.org/quickstart ​​​​快速开始本教程假定您正在开始新鲜,并且没有现有......
  • 无法停止服务、无法终止 PID 4100 的进程
    服务中无法停止服务。先查出服务对应的进程MicrosoftWindows[版本10.0.19043.1348](c)MicrosoftCorporation。保留所有权利。C:\Users\cj218>scqueryexVipSoft......
  • 【译】Amber20_Introduction
    Amber是一套程序的总称,它允许用户进行分子动力学模拟,特别是对生物大分子进行模拟。Amber中没有一个单独的程序使用这个名字,但是各个部分协同工作,并为许多常见的计算提供一......
  • WPS Office 2019 专业版最新终身授权序列号,彻底告别广告
    之前已经和大家分享了WPS2019的专业版,专业版的除了功能上比普通版多之外,最大的特点就是无弹窗、无广告、界面简洁,没有免费版那么多花里胡哨的东西。详情可以点之前的文章......
  • 迟来的 CSP-S 2022 VP记
    T2开的第一题,难度不高,不想说什么。写的比较仓促,所以码风可能不是很好,不知道为什么忘记用struct了。满分。#include<bits/stdc++.h>usingnamespacestd;typedeflo......
  • NOIP2022题解
    \(\mathbf{NOIP2022}\)\(\mathbf{plant}\)\(\mathbf{Describe}\)题面\(\mathbf{Solution}\)我们记\(f(x,y)\)表示从\((x,y)\)向右连续的\(0\)段的长度,\(up_......
  • #yyds干货盘点#【愚公系列】2022年12月 微信小程序-WebGL画渐变色正方形
    前言WebGL(全写WebGraphicsLibrary)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGLES2.0结合在一起,通过增加OpenGLES2.0的一个JavaScript绑定,WebGL可以为......
  • #yyds干货盘点#【愚公系列】2022年12月 微信小程序-WebGL动画的使用
    前言WebGL(全写WebGraphicsLibrary)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGLES2.0结合在一起,通过增加OpenGLES2.0的一个JavaScript绑定,WebGL可以为......
  • 020_排查OOM原因
    目录使用JProfiler工具分析OOM原因IDEA安装插件JProfiler并重启IDEA下载安装jprofiler打开JProfilerIDEA配置jprofiler编写产生OOM的代码配置内存溢出时导出堆Dump文件再次......