メインプロセスでは、mainWindow
というウィンドウを作成します。ボタンをクリックすると、browserWindow
という新しいnotesWindow
が作成されます。
私がやりたいのは、notesWindow
からmainWindow
にデータを送信することです
私がしたことは使用されますIPC sendは最初にnotesWindow
からメインプロセスにデータを送信し、メインプロセスでデータを取得し、次にそのデータをmainWindow
、ただしmainWindow
は送信者イベントを受信できません。メインプロセスへのデータの送信は正常に機能しますが、メインプロセスからbrowserWindowへのデータは機能していないようです。
main.js
const ipcMain = require('electron').ipcMain;
ipcMain.on('notes', function(event, data) {
console.log(data) // this properly shows the data
event.sender.send('notes2', data);
});
noteWindow.js
const ipcRenderer = require('electron').ipcRenderer;
ipcRenderer.send('notes', "new note");
mainWindow.js
const ipcRenderer = require("electron").ipcRenderer;
ipcRenderer.on('notes2', function(event, data) {
// this function never gets called
console.log(data);
});
誰かが私が間違っていることを説明できますか?前もって感謝します!
mainWindow
は、送信されていないため、イベントを受信できません。 _main.js
_のevents.sender.send()
コードは、notes
イベントを送信した人(この場合はnoteWindow
)にデータを送り返します。したがって、_notes2
_イベントは、noteWindow
ではなくmainWindow
に送り返されます。
_notes2
_イベントをmainWindow
に送信するには、 webContents.send()
を確認してください。これにより、メインプロセスはイベントを介して特定のウィンドウにデータを送信できます。 _main.js
_をいくつか変更すると、次のようになります。
_ipcMain.on('notes', function(event, data) {
mainWindow.webContents.send('notes2', data);
});
_
_main.js
_でipcハブをセットアップする必要はありません。ここに私がそれをする方法があります。
ここで重要なのは、renderer
がお互いを知る必要があるgetCurrentWebContents().id
間で直接ipcトークを行う場合です。
main.js
_function createWindow() {
mainWindow = new BrowserWindow(...);
global.mainWindow = mainWindow;
...
}
_
noteWindow.js
_const ipc = require("electron").ipcRenderer;
ipc.sendTo(
getGlobal("mainWindow").webContents.id,
"ChannelForMainWindow",
data,
web_component.id // for main window to send back
);
_
mainWindow.js
_ipc.on("ChannelForMainWindow", (e, data, web_component_id) => {
// do something
});
_
noteWindow.js
メインウィンドウの応答(もしあれば)のリスナーを追加しましょう
_const ipc = require("electron").ipcRenderer;
ipc.on("ChannelForNoteWindow", e => {
...
});
ipc.sendTo(
getGlobal("mainWindow").webContents.id,
"ChannelForMainWindow",
data,
web_component.id // for main window to send back
);
_
mainWindow.js
_ipc.on("ChannelForMainWindow", (e, data, web_component_id) => {
// do something
//send data back
ipc.sendTo(web_component_id, "ChannelForNoteWindow");
});
_