首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用remote vs ipcRenderer、ipcMain

何时使用remote vs ipcRenderer、ipcMain
EN

Stack Overflow用户
提问于 2016-04-11 20:06:07
回答 1查看 38.5K关注 0票数 55

我正在尝试理解电子主进程和渲染器进程之间的通信。文档https://github.com/electron/electron/blob/master/docs/api/remote.md声明“远程模块提供了一种在呈现器进程和主进程之间进行进程间通信(IPC)的简单方法”。

然而,关于如何设置它的文档非常稀少。

我可以让IPC示例与我的应用程序一起工作,这似乎很简单。在什么情况下应该使用远程模块?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 01:58:06

remote文档中:

电子、图形用户界面相关模块(如对话框、菜单等)中的

仅在主进程中可用,而在渲染器进程中不可用。为了从渲染器进程中使用它们,ipc模块需要发送进程间消息到主process.With远程模块,您可以调用主进程对象的方法而无需显式发送进程间消息,类似于Java。从渲染器进程创建浏览器窗口的示例:

const remote =需要(‘电子’).remote;const BrowserWindow = remote.BrowserWindow;var win =新BrowserWindow({宽度: 800,高度: 600 });win.loadURL('https://github.com');

基本上,remote模块使得在渲染过程中完成通常仅限于主进程的工作变得很容易,而不需要来回发送大量的手动ipc消息。

因此,在渲染器进程中,而不是:

代码语言:javascript
复制
const ipc = require('electron').ipcRenderer;
ipc.send('show-dialog', { msg: 'my message' });
ipc.on('dialog-shown', () => { /*do stuff*/ });

(然后在main中编写代码,以响应这些消息)。

您可以在渲染器中完成所有这些操作:

代码语言:javascript
复制
const remote = require('electron').remote;
const dialog = remote.require('dialog')

dialog.showErrorBox('My message', 'hi.');

ipc模块并不是显式需要的(尽管它在幕后为您提供)。这并不是说两者是相互排斥的。

在使用remote时还有一个问题。是否可以访问存在于主进程而不是模块中的函数?

我认为你真正想问的是:我如何在主/渲染器进程之间共享代码,以及我如何在渲染器中需要一个模块?

编辑:你可以像平常一样要求它。如果渲染器窗口的当前URL未指向本地文件(不是使用file://).加载的),则会出现这种情况如果你正在加载一个远程URL,你的请求路径需要是绝对的,或者你可以像我下面说的那样使用remote。

旧的:

这是remote的另一个用例。例如:

代码语言:javascript
复制
remote.require('./services/PowerMonitor.js')

注意,像这样使用remote会导致您的代码在主进程的上下文中运行。这可能有它的用处,但我会小心的。

像正常情况一样需要内置节点模块或electron

代码语言:javascript
复制
require('electron')
require('fs')

我可以从渲染器访问全局变量吗?

是。

代码语言:javascript
复制
//in main
global.test = 123;
//in renderer
remote.getGlobal('test') //=> 123
票数 86
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36548228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档