先日Electronを使用したWindowsアプリケーションを作成している際、Electronのshell.openExternal
が上手く動かないトラブルにハマりました。
原因としては非常に初歩的なうっかりミスだったのですが、誰か同じ点で躓いている方のお役に立てばと思い記事にさせていただきました。
やりたかったこと
「外部ブラウザで何か画面を開き、自分のウィンドウは閉じる」みたいな処理をしたい
ハマった点
Electronのshell.openExternal
は非同期で開く処理をしています。
そのため、安直に
shell.OpenExternal('https://example.com/');
//何か処理
window.close();
のように書いてしまうと開く前にレンダラプロセスが終了してしまい、意図したとおりに動かなくなってしまう可能性があります。
解決法
shell.openExternal
がPromise
を返してくれるので、それにメソッドチェーンとして
shell.openExternal('https://example.com/').then(() => {
// 何か処理
window.close();
}).catch((e) => {
// 何かエラー時の処理
console.log(`Error!: ${e}`);
});
のように書くと、意図したとおり動いてくれます。