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]);
}
});
});
この記事が気に入ったらサポートをしてみませんか?