Electronメインプロセスとレンダリングプロセスの通信方式

2521 ワード

            Electron              .

  
ipcMainとipcRendererの使用
  //        
  const {ipcMain} = require('electron')
  ipcMain.on('asynchronous-message', (event, arg) => {
    console.log(arg) // prints "ping"
    event.sender.send('asynchronous-reply', 'pong')
  })
 
  ipcMain.on('synchronous-message', (event, arg) => {
    console.log(arg) // prints "ping"
    event.returnValue = 'pong'
  })

  
要点:
  • レンダリングプロセスは、ipcRendererを介してメインプロセスにメッセージ
  • を送信することができる.
  • メインプロセスは、ipcMainを介してレンダリングプロセスからのメッセージをリスニングする.メッセージの種類に応じて異なる動作
  • を実行する.
  • メインプロセスのコールバック方法はeventargの2つのパラメータを含む.argのオブジェクトには、レンダリングプロセスの伝達パラメータが保存する.event.senderのオブジェクトによって、メインプロセスは直接レンダリングプロセスに戻るメッセージを送信することができる.メインプロセスが実行する同期方法であれば、event.returnValueを設定ことにより、戻り値を取得することもできる.

  •  
    electronを使用します.remoteモジュール
    レンダープロセスでは、const {remote} = require('electron')によりremoteオブジェクトを取得することができる.このオブジェクトにより、レンダリングプロセスがメインプロセスのモジュールにアクセスすることができる.
    const {BrowserWindow} = require('electron').remote;
    let win = new BrowserWindow({width: 800, height: 600});
    win.loadURL('https://xxx.com');
    

    同様に、remoteオブジェクトからappオブジェクトにアクセスすることもできます.これにより、メインプロセスでelectron.appオブジェクトにマウントする方法にアクセスできます.
    //    
    const { app } = require('electron');
    const utils = require('./utils');
     
    app.utils = utils; //    Electron           app  
    

      
    //     
    const { remote } = require('electron');
    function() {
        // remote.app.utils         utils      。
        remote.app.utils.test();
    }
    

    要点:remoteオブジェクトにより、プロセス間メッセージを送信することなく通信できます.実際には、リモート・オブジェクトを呼び出す方法、関数、またはリモート・コンストラクション関数によって新しいオブジェクトを作成します.実際には同期されたプロセス間メッセージが送信されます(公式文書ではJAVARMIに類似しています).つまり、remoteメソッドは、送信プロセス間のメッセージを明示的に書く必要がない方法にすぎません.remoteモジュールによってBrowserWindowが作成された例では、レンダリングプロセスで作成されたBrowserWindowオブジェクトは、実際にはレンダリングプロセスではなく、プライマリ・インプリメンテーションにすぎません.スレッドはBrowserWindowオブジェクトを作成し、対応するリモートオブジェクトをレンダリングプロセスに返します.
     
    Electron入門レベルの学習資料は無料で入手できます