開発

ElectronでRenderer Processから立ち上げたBrowserWindowを閉じる方法

Electronで新しいウィンドウを立ち上げる場合、通常BrowserWindowを使うわけです(hrefで新しいウィンドウを呼べたりできますがここでは対象外)がRenderer Processから直接呼ぶことが出来ません。ですのでremoteなどでMain Process経由で呼ぶ必要があります。

sample1

const electron = require('electron')
const remote = electron.remote
const BrowserWindow = remote.BrowserWindow

const newWin = new BrowserWindow ({ width: 300, height: 200})Code language: JavaScript (javascript)

通常はこれで困らないのですがプログラム側でこのウィンドウを閉じる場合ハマりました。
例えばFramelessなウィンドウを作った場合、閉じるボタンがないので自前で閉じる処理をする必要がありますがこんな感じの処理で閉じようとすると閉じてくれません。

sample2

// フォーカスが外れたらウィンドウを閉じる
onBlur = () => {
  newWin.close()
}Code language: JavaScript (javascript)

コマンドは実行されているみたいですがウィンドウは残ったままになってしまいます。
これをちゃんと閉じるには、BrowserWindowのスタティックメソッドを使う必要があります。

sample3

const electron = require('electron')
const remote = electron.remote
const BrowserWindow = remote.BrowserWindow

// クリックで新しいウィンドウオープン
onClick = (url) => {
  let newWin = new BrowserWindow ({ width: 300, height: 200, frame: false })
  newWin.loadURL(url)

  // フォーカスが外れたらウィンドウを閉じる
  newWin.on('blur', () => {
    BrowserWindow.fromId(newWin.id).close()
    newWin = null
  })

}Code language: JavaScript (javascript)

BrowserWindow.fromId でウィンドウIDを指定してBrowserWindow.closeで閉じてあげればちゃんと閉じてくれます。
ウィンドウIDは各ウィンドウが持っています。

管理人

Recent Posts

情報セキュリティマネジメント試験取得への道

スキルアップを図るべく情報セキ…

2か月 ago

ファイナンシャルプランナー3級試験取得への道

スキルアップを図るべくファイナ…

2か月 ago

[rust] New Type Patternを使ってみる

DDDの考えを取り入れることで…

5か月 ago

RustでDDDの要素を取り入れてみる

前回SOLID原則というものを…

5か月 ago

期間限定!書籍無料キャンペーン2025

「mdBookではじめるKin…

5か月 ago