use*_*388 46 javascript electron
我试图理解电子主要和渲染过程之间的通信.文档https://github.com/electron/electron/blob/master/docs/api/remote.md指出"远程模块提供了一种在渲染器进程和渲染器之间进行进程间通信(IPC)的简单方法.主要过程."
但是,关于如何设置它的文档很少.
我可以将IPC示例与我的应用程序一起使用,这看起来很简单.在什么情况下应该使用远程模块?
ccn*_*kes 75
从远程文档:
在Electron中,与GUI相关的模块(例如对话框,菜单等)仅在主进程中可用,而不在渲染器进程中可用.为了在渲染器进程中使用它们,必须使用ipc模块将进程间消息发送到主进程.使用远程模块,您可以调用主进程对象的方法,而无需显式发送进程间消息,类似于Java的RMI.从渲染器进程创建浏览器窗口的示例:
Run Code Online (Sandbox Code Playgroud)const remote = require('electron').remote; const BrowserWindow = remote.BrowserWindow; var win = new BrowserWindow({ width: 800, height: 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*/ });
Run Code Online (Sandbox Code Playgroud)
(然后在主要代码中执行操作以响应这些消息).
您可以在渲染器中完成所有操作:
const remote = require('electron').remote;
const dialog = remote.require('dialog')
dialog.showErrorBox('My message', 'hi.');
Run Code Online (Sandbox Code Playgroud)
没有明确要求ipc模块(虽然它在幕后发生).不是说两者是相互排斥的.
使用遥控器时的另一个问题.是否可以访问主进程中存在的函数而不是模块?
我认为您真正要问的是:如何在主/渲染器进程之间共享代码以及如何在渲染器中需要模块?
编辑:您可以像平常一样要求它.边缘情况是,如果渲染器窗口的当前URL未指向本地文件(未使用file://加载).如果您正在加载远程URL,则您的需求路径必须是绝对路径,或者您可以使用远程URL,如下所述.
旧:
这是另一个用例remote.例如:
remote.require('./services/PowerMonitor.js')
Run Code Online (Sandbox Code Playgroud)
请注意,使用类似遥控器会导致您的代码在主进程的上下文中运行.这可能有它的用途,但我会小心.
内置节点模块或electron正常需要:
require('electron')
require('fs')
Run Code Online (Sandbox Code Playgroud)
我可以从渲染器访问全局变量吗?
是.
//in main
global.test = 123;
//in renderer
remote.getGlobal('test') //=> 123
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28941 次 |
| 最近记录: |