ipcmain.handle 参数具有元数据(?)而不是值

问题描述 投票:0回答:1

我是电子初学者,我的应用程序除了解压 zip 并启动 .bat 文件(它是一个安装程序)之外什么也不做,我需要用户提供数据库的 url,但当它返回时我进入 ipcMain:

{"sender":{"_windowOpenHandler":null,"ipc":{"_events":{},"_eventsCount":1,"_invokeHandlers":{}},"_events":{"render-process-gone":[null,null]},"_eventsCount":13},"frameId":1,"processId":4} 

main.js:(不是整个文件只是处理)

    ipcMain.handle('run-start', async (database) => {
        console.log(`dbUrl in main.js:`, JSON.stringify(database), `Type:`, typeof database);
    const command = path.join(filePath, 'dist', 'setup.bat') + ' ' + database
    try {
        console.log(command)
        // const result = await new Promise((resolve, reject) => {
        //     exec(command, (error, stdout, stderr) => {
        //         if (error) {
        //             reject(`Error: ${stderr}`);
        //         } else {
        //             resolve(stdout);
        //         }
        //     });
        // });
        return result;
    } catch (error) {
        return error;
    }
})

preload.js(整个文件):

const { contextBridge, ipcRenderer } = require('electron');

contextBridge.exposeInMainWorld('electron', {
    selectFolder: () => ipcRenderer.invoke('select-folder'),
    runInstall: (destDir) => ipcRenderer.invoke('run-install', destDir),
    runStart: (dbUrl) => {ipcRenderer.invoke('run-start', dbUrl); console.log(dbUrl)}
});

index.html(只是单击的 btn 的处理程序):

        document.getElementById('startButton').addEventListener('click', async () => {
        console.log(dbUrl)
        await window.electron.runStart(dbUrl)
        alert('ClassyBooks is gestart!');
    });

除了 main.js 之外,dbUrl 在任何地方都是正确的

javascript electron
1个回答
0
投票

ipcMain.handle
的回调有两个参数。

    1. 活动
    1. 参数

您尝试使用事件对象作为参数。

如果您不需要访问事件对象,请使用它:

ipcMain.handle('run-start', async (_, database) => {
  // YOUR CODE
});
© www.soinside.com 2019 - 2024. All rights reserved.