主进程与渲染进程之间的通信

时间:2019-05-20 13:15:13

标签: javascript node.js electron

我正在跟踪渲染器内部的鼠标坐标。我想要实现的是,我将这些变化的鼠标坐标发送到main.js(node.js)中的一个函数中,然后此函数将计算出一些内容并返回值,而我在renderer中的其他函数将使用此变量,如乒乓球。

每次用户移动鼠标时都会重复此过程。 electron.js 是否可以?

2 个答案:

答案 0 :(得分:1)

阅读主题 ipc通信,即IpcMainIpcRenderer

通过ipc通信机制,您可以设置主进程与渲染器进程之间的通信。

答案 1 :(得分:1)

可以,但最好在渲染器一侧使用鼠标坐标来运行。因为像流一样发送ipc消息可能会使应用程序变慢。

以下是一个示例,说明如何为此目的使用ipc消息。

(function() {


    const ipcRenderer = require('electron').ipcRenderer;
    document.onmousemove = handleMouseMove;
    function handleMouseMove(event) {
        var eventDoc, doc, body;

        event = event || window.event; // IE-ism

        // If pageX/Y aren't available and clientX/Y are,
        // calculate pageX/Y - logic taken from jQuery.
        // (This is to support old IE)
        if (event.pageX == null && event.clientX != null) {
            eventDoc = (event.target && event.target.ownerDocument) || document;
            doc = eventDoc.documentElement;
            body = eventDoc.body;

            event.pageX = event.clientX +
              (doc && doc.scrollLeft || body && body.scrollLeft || 0) -
              (doc && doc.clientLeft || body && body.clientLeft || 0);
            event.pageY = event.clientY +
              (doc && doc.scrollTop  || body && body.scrollTop  || 0) -
              (doc && doc.clientTop  || body && body.clientTop  || 0 );
        }

        // Use event.pageX / event.pageY here
        ipcRenderer.send('mouse-move',{ x : event.pageX , y : event.pageY });
    }
})();

和main.js中的

const ipcMain= require('electron').ipcMain;
ipcMain.on('mouse-move', (event, arg) => {
  console.log(arg) // prints eg :"{ x: 0 , y : 0 }"
  event.sender.send('return-value', arg.x + arg.y);//for eg : adds x and y
})

并在渲染器脚本中捕获返回值

ipcRenderer.on('return-value', (event, arg) => {
  console.log(arg) // prints 0 ; x + y 
  // Do what you want to do with the value
})