我正在尝试理解电子主进程和渲染器进程之间的通信。文档https://github.com/electron/electron/blob/master/docs/api/remote.md声明“远程模块提供了一种在呈现器进程和主进程之间进行进程间通信(IPC)的简单方法”。
然而,关于如何设置它的文档非常稀少。
我可以让IPC示例与我的应用程序一起工作,这似乎很简单。在什么情况下应该使用远程模块?
发布于 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消息。
因此,在渲染器进程中,而不是:
const ipc = require('electron').ipcRenderer;
ipc.send('show-dialog', { msg: 'my message' });
ipc.on('dialog-shown', () => { /*do stuff*/ });(然后在main中编写代码,以响应这些消息)。
您可以在渲染器中完成所有这些操作:
const remote = require('electron').remote;
const dialog = remote.require('dialog')
dialog.showErrorBox('My message', 'hi.');ipc模块并不是显式需要的(尽管它在幕后为您提供)。这并不是说两者是相互排斥的。
在使用remote时还有一个问题。是否可以访问存在于主进程而不是模块中的函数?
我认为你真正想问的是:我如何在主/渲染器进程之间共享代码,以及我如何在渲染器中需要一个模块?
编辑:你可以像平常一样要求它。如果渲染器窗口的当前URL未指向本地文件(不是使用file://).加载的),则会出现这种情况如果你正在加载一个远程URL,你的请求路径需要是绝对的,或者你可以像我下面说的那样使用remote。
旧的:
这是remote的另一个用例。例如:
remote.require('./services/PowerMonitor.js')注意,像这样使用remote会导致您的代码在主进程的上下文中运行。这可能有它的用处,但我会小心的。
像正常情况一样需要内置节点模块或electron:
require('electron')
require('fs')我可以从渲染器访问全局变量吗?
是。
//in main
global.test = 123;
//in renderer
remote.getGlobal('test') //=> 123https://stackoverflow.com/questions/36548228
复制相似问题