当前位置: 首页 > news >正文

electron进程通信之预加载脚本和渲染进程对主进程通信

主进程和预加载脚本通信

  • 主进程 mian,js 和预加载脚本preload.js,
  • 在主进程中创建预加载脚本,
const createWindow = () => {// Create the browser window.const mainWindow = new BrowserWindow({width: 300,height: 300,// 指定预加载脚本webPreferences: {preload: path.join(__dirname, "preload.js"),nodeIntegration: true},// frame: false, //隐藏标题栏transparent: true});//每次启动弹出调试框mainWindow.webContents.toggleDevTools();// 加载页面文件mainWindow.loadFile(path.resolve(__dirname, "index.html"));// 加载外部链接// mainWindow.loadURL('')// 打开开发工具// mainWindow.webContents.openDevTools()
};
app.whenReady().then(() => {createWindow();app.on("activate", () => {// 在 macOS 系统内, 如果没有已开启的应用窗口// 点击托盘图标时通常会重新创建一个新窗口if (BrowserWindow.getAllWindows().length === 0) createWindow();});
});
  • 在主进程中使用ipcMain这个api进行事件监听,假设监听 ‘ceshi’ 这个事件,下面在这个
//这段代码放到main.js最后就行
ipcMain.on('ceshi', () => {console.log('11111111111')
})
  • 预加载脚本 使用ipcRenderer.send发送事件
  • preload.js 全部代码
const { ipcRenderer } = require("electron");
ipcRenderer.send('ceshi')
  • 结果
    在这里插入图片描述

渲染进程和预加载脚本通信

  • 使用contextBridge.exposeInMainWorld全局变量,预加载脚本里面的window和渲染进程里面的winodw不是通信
  • 预加载代码
const { ipcRenderer, contextBridge } = require("electron");
contextBridge.exposeInMainWorld('api', {//将fn这个方法变为全局变量 可以在渲染进程这种访问fn: () => {ipcRenderer.send('ceshi')}})
  • 渲染进程代码
// 在dom渲染完之后获取dom
// 为了方便测试在index页面写了一个button 通过点击事件测试通信
window.addEventListener('DOMContentLoaded', () => {const btn = document.querySelector('#btn')console.log(window)btn.addEventListener('click', () => {window.api.fn()})
})
  • 结果
    在这里插入图片描述
http://www.lryc.cn/news/273802.html

相关文章:

  • 如何有效使用 .gitignore 文件
  • 大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化
  • 大语言模型训练数据集
  • python的课后练习总结4(while循环)
  • Flink Connector 开发
  • Golang leetcode707 设计链表 (链表大成)
  • Django和Vue项目运行过程中遇到的问题及解决办法
  • Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
  • el-cascader隐藏某一级的勾选框及vue报错Error in callback for watcher “options“的解决办法
  • 2024美赛数学建模思路A题B题C题D题E题F题思路汇总 选题分析
  • C++ 常用设计模式
  • 高性价比的高速吹风机/高速风筒解决方案,基于普冉单片机开发
  • toRefs的用法
  • MySQL基础篇(三)约束
  • Java进阶 1-2 枚举
  • 一个人最大的内驱力是什么?
  • 解决方法:公众号的API上传素材报错40005
  • 音量控制软件sound control mac功能亮点
  • Spring Boot 生产就绪中文文档-下
  • DS|树结构及应用
  • Java 读取超大excel文件
  • K8S中的job和CronJob
  • 中国文化文物和旅游统计年鉴,数据含pdf、excel等格式,文本形式呈现,可预览数据
  • Java版企业电子招标采购系统源码——鸿鹄电子招投标系统的技术特点
  • go语言语法基础
  • eclipse 和java环境的安装教程
  • Win11系统的优化方法参考文档(彻底优化策略)
  • Leetcode13-解密消息(2325)
  • 二进制安装包安装Prometheus插件安装(mysql_exporter)
  • 原生微信小程序如何动态修改svg图片颜色及尺寸、宽高(封装svgIcon组件)