• electron——ipcMain模块、ipcRenderer模块


    ipcMain

    主进程渲染进程 的异步通信。

    ipcMain模块是EventEmitter类的一个实例。 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。 从渲染器进程发送的消息将被发送到该模块。

    举个例子

    // 在主进程中.
    const { ipcMain } = require('electron')
    // 监听asynchronous-message,接收渲染进程发送的消息
    ipcMain.on('asynchronous-message', (event, arg) => {
      console.log(arg) // prints "ping"
      // 回复消息
      event.reply('asynchronous-reply', 'pong')
    })
    
    // 监听synchronous-message,接收渲染进程发送的消息
    ipcMain.on('synchronous-message', (event, arg) => {
      console.log(arg) // prints "ping"
      // 返回的值
      event.returnValue = 'pong'
    })
    
    //在渲染器进程 (网页) 中。
    const { ipcRenderer } = require('electron')
    // 向主进程synchronous-message发送消息,并接收返回结果
    console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"
    
    // 接收asynchronous-reply返回的消息
    ipcRenderer.on('asynchronous-reply', (event, arg) => {
      console.log(arg) // prints "pong"
    })
    // 向asynchronous-message发送消息
    ipcRenderer.send('asynchronous-message', 'ping')
    

    方法

    ipcMain.on(channel, listener)

    • channel String
    • listener Function

    监听 channel,当接收到新的消息时 listener 会以 listener(event, args...) 的形式被调用。

    // 监听message,接收渲染进程发送的消息
    ipcMain.on('message', (event, arg) => {
      ...
    })
    

    ipcMain.once(channel, listener)

    • channel String
    • listener Function

    添加一次性的 listener。当且仅当下一个消息发送到 channellistener 才会被调用,随后 <0>listener</0> 会被移除。

    // 监听message,接收渲染进程发送的消息
    ipcMain.once('message', (event, arg) => {
      ...
    })
    

    ipcMain.removeListener(channel, listener)

    • channel String
    • listener Function

    从监听器数组中移除监听 channel 的指定 listener

    ipcMain.removeAllListeners([channel])

    • channel String

    删除所有监听者,或特指的 channel 的所有监听者.

    事件对象

    传递给 callback 的 event 对象有如下方法:

    event.frameId

    一个整数,表示发送此消息的呈现程序帧的ID。

    event.returnValue

    将此设置为在一个同步消息中返回的值.

    event.sender

    返回发送消息的web内容,您可以调用event.sender。发送以回复异步消息 webContents.send

    event.reply

    一个函数,它将向发送您当前正在处理的原始消息的呈现程序frane发送IPC消息。您应该使用此方法对发送的消息进行“回复”,以确保回复将进入正确的流程和框架。

    ipcRenderer

    渲染器进程主进程 的异步通信。

    ipcRenderer 是一个 EventEmitter 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。

    方法

    ipcRenderer.on(channel, listener)

    • channel String
    • listener Function

    监听 channel, 当新消息到达,将通过 listener(event, args...) 调用 listener。

    ipcRenderer.on('refresh-page', (event, arg) => {
      ...
    })
    

    ipcRenderer.once(channel, listener)

    • channel String
    • listener Function

    为事件添加一个一次性用的listener 函数.这个 listener 只有在下次的消息到达 channel 时被请求调用,之后就被删除了。

    ipcRenderer.once('printerList', (event, arg) => {
      ...
    })
    

    ipcRenderer.removeListener(channel, listener)

    • channel String
    • listener Function

    为特定的 channel 从监听队列中删除特定的 listener 监听者。

    ipcRenderer.removeAllListeners(channel)

    • channel String

    移除所有的监听器,当指定 channel 时只移除与其相关的所有监听器。

    ipcRenderer.send(channel[, arg1][, arg2][, ...])

    • channel String
    • ...args any[]

    通过 channel 发送异步消息到主进程,可以携带任意参数。 在内部,参数会被序列化为 JSON,因此参数对象上的函数和原型链不会被发送。

    主进程可以使用 ipcMain 监听channel 来接收这些消息。

    ipcRenderer.send("printerList");
    

    ipcRenderer.sendSync(channel[, arg1][, arg2][, ...])

    • channel String
    • ...args any[]

    返回 any - 由 ipcMain 处理程序发送过来的值。

    通过 channel 发送同步消息到主进程,可以携带任意参数。 在内部,参数会被序列化为 JSON,因此参数对象上的函数和原型链不会被发送。

    主进程可以使用 ipcMain 监听 channel来接收这些消息,并通过 event.returnValue 设置回复消息。

    注意: 发送同步消息将会阻塞整个渲染进程,你应该避免使用这种方式 - 除非你知道你在做什么。

    ipcRenderer.sendSync("printerList");
    

    ipcRenderer.sendTo(webContentsId, channel, [, arg1][, arg2][, ...])

    • webContentsId Number
    • channel String
    • ...args any[]

    通过通道向带有webContentsId的窗口发送消息。

    ipcRenderer.sendToHost(channel[, arg1][, arg2][, ...])

    • channel String
    • ...args any[]

    就像 ipcRenderer.send,不同的是消息会被发送到 host 页面上的 <webview> 元素,而不是主进程。

    事件对象

    event.senderId

    返回webcontent。发送消息的id,您可以调用event.sender. sendto (event)。要回复此消息,请参见ipcRenderer。发送到以获取更多信息。这只适用于从不同呈现程序发送的消息。直接从主进程集事件发送的消息。senderId为0。

    ipcMain

    ipcRenderer

  • 相关阅读:
    mybatis-插入数据库中文报错问题
    springmvc-异常处理
    springmvc-拦截器
    springmvc-上传文件
    springMVC-响应数据与结果视图
    MFC 中CString 格式16进制转int 十进制
    Excel 二维数组(数据块)旋转/翻转技巧
    SWD通讯
    IIC时序详解
    用EXCEL做快速傅立葉轉換_FFT in Excel
  • 原文地址:https://www.cnblogs.com/loveyt/p/11031687.html
Copyright © 2020-2023  润新知