为什么我的IPC通信无法正常工作?

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

这是使用Electron构建的简单视频时长检查程序。但是,它不能按预期方式工作;我还尝试在其他项目中使用Electron IPC通信,但始终失败。我可以成功上传视频并提交,之后什么也没发生,没有任何错误或建议。调试器也什么也没显示。我从零开始构建了一个新项目,并遇到了同样的问题。路径值也未显示在控制台上

main.js:

const electron = require('electron'),
app = electron.app,
BrowserWindow = electron.BrowserWindow
const ffmpeg = require('fluent-ffmpeg')
const ipc = require('electron').ipcMain

let mainWindow

app.on('ready', () => {
    mainWindow = new BrowserWindow({})
    mainWindow.loadFile('./index.html')
})

ipc.on('video:submit', (event, path) => {
    ffmpeg.ffprobe(path, (metadata) => {
        event.returnValue = metadata.format.duration
    })
})

index.html:

<html>
    <head>
    </head>
    <body>
        <form id="form">
            <h1>Video Info</h1>
            <div>
                <label>Select a video</label>
                <input type="file" accept="video/*" id="input">
            </div>
            <button type="submit" id="sb">Get info</button>
            <div id="result"></div>
        </form>
    </body>
    <script>
        require('./renderer.js')
    </script>
</html>

renderer.js:

const ipc = require('electron').ipcRenderer,

form = document.querySelector('#form')

let result = document.querySelector('#result')

console.log(path)

form.addEventListener('submit', () => {
    const path = document.querySelector('#input').files[0].path
    let reply = ipc.sendSync('video:submit', path)
    result.innerHTML = 'Video is' + reply + 'seconds!'
})

编辑

我对main和renderer进行了一些更改,以使用异步发送和回复。我没有得到想要的东西,但是在提交了一些内容之后,它的名称被替换为“未选择文件”。路径值仍然无法打印。

main.js的更改:

ipc.on('video:submit', (event, path) => {
    ffmpeg.ffprobe(path, (metadata) => {
        let duration = metadata.format.duration
        event.reply('duration', duration)
    })
})

renderer.js的更改:

form.addEventListener('submit', () => {
    const path = document.querySelector('#input').files[0].path
    ipc.on('duration', (event, duration) => {
        console.log(duration)
    })
    ipc.send('video:submit', path)
    result.innerHTML = 'Video is' + duration + 'seconds!'
})
javascript electron ipc
1个回答
0
投票

代码看起来不错,但我想问题在于您提交表单。该页面应在提交时重新加载,并且未到达IPC发送呼叫。尝试阻止表单的默认操作。

form.addEventListener('submit', (e) => {
  e.preventDefault()
  const path = document.querySelector('#input').files[0].path
    ipc.on('duration', (event, duration) => {
        console.log(duration)
    })
   ipc.send('video:submit', path)
    result.innerHTML = 'Video is' + duration + 'seconds!'
  })
© www.soinside.com 2019 - 2024. All rights reserved.