LoginSignup
4
2

More than 3 years have passed since last update.

ElectronでBrowserWindow側にメインプロセスの変数を引き渡す

Posted at

TL;DR

ElectronでBrowserWindow側にメインプロセスの変数を引き渡す際のやり方のメモ。

実装

以下、サンプルです。

Electronはindex.jsで開始し、その中でどこからか取得した文字列をpreload.js経由でBrowserWindowに引き渡します。この例では定数で宣言しちゃっていますが。

index.js
const electron = require('electron')
const app = electron.app
let mainWindow

// Electron起動時にグローバル変数を宣言しておく
global.hoge= "Hello World!"

app.on('ready', function () {
  let opt
  opt.webPreferences = {
    nodeIntegration: false,
    preload: `${__dirname}/preload.js`
  }
  mainWindow = new BrowserWindow(opt)
  mainWindow.loadURL(`file://${__dirname}/index.html`)

  mainWindow.on('closed', function () {
    mainWindow = null
  })
})

BrowserWindowが呼び出される前に実行されるpreload.jsでは、remote.getGlobal() を使ってグローバル変数を取得。

preload.js
const { remote } = require('electron')
// リモートプロセス(Electronのメインプロセス)からグローバル変数を取得する。
global.hoge= remote.getGlobal('hoge')

ブラウザアプリ側では、app.jsを読み込んで処理を行っているという想定だと、以下のように読み込んだ変数を利用できます。

app.js
// preloadの段階ではまだNode.jsで動いているためグローバルはglobalだが、
// BrowserWindow側ではChroniumで動くのでグローバルはwindowとなる。
console.log(window.hoge)

他に別解はあると思いますが、まあこんなやり方もありますよ、ということで。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2