Electron / nodejsで調べたところ雑まとめ

表題の通り。また使うだろうあれやこれやを放り込んでおく場所。

ipcレンダー側送信

参考。

非同期

//レンダー
const {ipcRenderer} = require('electron');
ipcRenderer.send('asynchronous-message', 'ping');
ipcRenderer.on('asynchronous-reply', (event, arg) => {
 // "pong"
 console.log(arg);
});
//メイン
const {ipcMain} = require('electron');
//受信
ipcMain.on('asynchronous-message', (event, arg) => {
 console.log(arg);
 event.sender.send('asynchronous-reply', 'pong');
});

同期

//レンダー
const {ipcRenderer} = require('electron');
var string = ipcRenderer.sendSync('synchronous-message', 'ping');
console.log(ret);
// メイン
const {ipcMain} = require('electron');
ipcMain.on('synchronous-message', (event, arg) => {
 console.log(arg)
 event.returnValue = 'pong'
or
            event.reply('method', 'pong')
})

基本的にはレンダーから発信して応答してもらう事が多いと思う。eventで返答先が取れてるので、replyメソッドで受信側の別のメソッドを発火することもできる。結構大事だと思う。

ipcメイン側送信

順次処理して画面表示とかに使うと思う。

送信


var indexWindow: BrowserWindow = new BrowserWindow(・・・略・・・);
indexWindow.webContents.send('asynchronous-message', 'ping');

受信

ipcRenderer.on('asynchronous-message',  (event, arg) => {
           console.log(arg) // prints "pong"
       })

ファイル一覧を取得

const fs = require('fs');
fs.readdir('.', function(err, files){
 if (err) throw err;
 console.log(files);
});

タイマー

function intervalFunc() {
 console.log('Cant stop me now!');
}

let timer = setInterval(intervalFunc, 1500);
//クリア
clearInterval(timer);
//1000ミリ秒待つ
setTimeout("alert('Hello')", 1000);

シンプルなスリープ関数

 function sleep(time) {
       return new Promise((resolve, reject) => {
           setTimeout(() => {
               resolve();
           }, time);
       });
   }

for loopにsleepを挟んだ処理

参考

function sleep(time) {
   return new Promise((resolve, reject) => {
       setTimeout(() => {
           resolve();
       }, time);
   });
}
(async () => {
   const a = [1,2,3,4,5];
   for(let i of a) {
       await sleep(1000);
       console.log(i);
   }
})();

エクスプローラーで開く

const {shell} = require('electron');
shell.showItemInFolder(dirPath);

外部ライブラリの読み込み

//main.js
const {app, BrowserWindow, ipcMain, dialog} = require('electron');
const acc = require("./main_functions");
acc.saveFile(spineJson);

私作のライブラリとかを読み込む時とか。

ファイルをダイアログで開く

const {dialog} = require('electron').remote;
$(function () {
   let sendPara = {
       dirPath: null,
   };
   $("#selectFile").click(function () {
       let file = dialog.showOpenDialogSync(null, {
           properties: ['openFile'],
           title: 'Select a csv file',
           filters: [
               {name: 'csv files', extensions: ['csv']}
           ],
           defaultPath: '.',
       });
       if (_.isNil(file)) {
           sendPara.baseFile = null;
           $("#selectedFile").text("");
       } else {
           sendPara.baseFile = file[0];
           $("#selectedFile").text(file[0]);
       }
   });
});

この記事が気に入ったらサポートをしてみませんか?