gpt4 book ai didi

javascript - 为什么我的IPC通讯不能正常工作?

转载 作者:行者123 更新时间:2023-11-28 03:04:45 25 4
gpt4 key购买 nike

这是一个用 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>

渲染器.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!'
})

最佳答案

代码看起来不错,但我猜问题出在您的表单提交上。页面应在提交时重新加载,但未到达 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!'
})

关于javascript - 为什么我的IPC通讯不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60698538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com