如何在Electron Framework中的渲染器进程内执行主进程的功能

本文概述

  • 1.在主流程中设置事件监听器
  • 2.从渲染器进程触发事件
  • 3.请求和发送信息
在某些情况下, 你将需要执行仅在主流程级别可以访问的功能, 此外, 执行一些由于执行成本高昂而可以锁定用户界面的JS代码可能会很有用。使用JavaScript和导出功能的一些知识可以轻松完成此操作, 但是, 如果你要遵循Electron准则, 建议你使用Electron的ipcMain模块和ipcRenderer模块, 这将帮助你与主模块进行异步通信。进程到渲染器进程。
1.在主流程中设置事件监听器你首先要做的是使用ipcMain模块在主进程中创建一个事件侦听器。它的工作原理非常简单明了, 你只需附加一个事件监听器, 一旦ipcRenderer模块(在视图中)请求执行它的回调, 便会执行该回调。
因此, 将事件侦听器附加到在主进程中运行的文件中, 例如main.js:
// In some file from the main process// like main.jsconst {ipcMain} = require('electron'); // Attach listener in the main process with the given IDipcMain.on('request-mainprocess-action', (event, arg) => {// Displays the object sent from the renderer process://{//message: "Hi", //someData: "Let's go"//}console.log(arg); });

在回调内部, 你要在主流程中执行的代码。在这种情况下, 我们仅在控制台(启动Electron应用程序的控制台)中显示在渲染器(视图)进程中发送的数据。要知道如何触发此回调, 请检查以下步骤。
2.从渲染器进程触发事件现在, 如果你确定主进程中已经有一个IPC事件侦听器, 则可以在渲染器进程中使用其ID触发它。为了清楚起见, 我们将从脚本标记内的索引文件中执行它:
< !doctype html> < html lang="en"> < head> < meta charset="utf-8"> < meta http-equiv="X-UA-Compatible" content="IE=edge"> < title> Electron Application< /title> < !-- Use minimum-scale=1 to enable GPU rasterization --> < meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0, maximum-scale=1, minimum-scale=1"> < /head> < body> < div id="app"> < /div> < script> /*** The code can be included in some JS file and included* via require or < script> in the renderer process*/const { ipcRenderer } = require('electron'); // Some data that will be sent to the main processlet Data = http://www.srcmini.com/{message:"Hi", someData: "Let's go"}; // Send information to the main process// if a listener has been set, then the main process// will react to the request !ipcRenderer.send('request-mainprocess-action', Data); < /script> < /body> < /html>

在这种情况下, 就像在视图中一样, 使用ipcRenderer模块, 你只需要从该模块执行send方法, 该方法期望将要触发的事件的ID作为第一个参数, 而将对象, 字符串, 布尔值, 包含要从渲染器进程发送到主进程的信息。
3.请求和发送信息如果要发送数据而不是仅执行回调, 则可以遵循相同的过程, 但是使用event.sender对象将信息从主过程发送到渲染器过程, 并在视图中添加带有IPCRenderer的侦听器:
主要过程
// In some file from the main process// like main.jsconst {ipcMain} = require('electron'); // Attach listener in the main process with the given IDipcMain.on('request-mainprocess-action', (event, arg) => {// Displays the object sent from the renderer process://{//message: "Hi", //someData: "Let's go"//}console.log(arg); // Return some data to the renderer process with the mainprocess-response IDevent.sender.send('mainprocess-response', "Hello World!"); });

渲染程序
/** * The code can be included in some JS file and included * via require or < script> in the renderer process*/const { ipcRenderer } = require('electron'); // Some data that will be sent to the main processlet Data = http://www.srcmini.com/{message:"Hi", someData: "Let's go"}; // Add the event listener for the response from the main processipcRenderer.on('mainprocess-response', (event, arg) => {console.log(arg); // prints "Hello World!"}); // Send information to the main process// if a listener has been set, then the main process// will react to the request !ipcRenderer.send('request-mainprocess-action', Data);

【如何在Electron Framework中的渲染器进程内执行主进程的功能】编码愉快!

    推荐阅读