gpt4 book ai didi

javascript - 在 Electron 中使用 AudioWorklet (DOMException : The user aborted a request)

转载 作者:行者123 更新时间:2023-12-01 23:07:50 34 4
gpt4 key购买 nike

我正在尝试在我的 Electron 应用程序中使用 AudioWorklet 进行计量等,当在开发模式下执行时工作正常,其中工作集由快速开发服务器(如 http://localhost:3000/processor.js)提供服务.
但是,如果我尝试在 prod 模式下运行该应用程序,则该文件将在本地提供,例如 file://tmp/etc/etc/build/processor.js 并且在开发人员控制台中,我什至可以看到该文件正在正确预览,但我收到此错误消息:

未捕获( promise 中)DOMException:用户中止了请求。

over here之前看到别人也有类似的问题但不幸的是,我在堆栈溢出方面的声誉还不够高,无法直接发表评论。将 mime 类型更改为 application/javascript 或 text/javascript 的建议听起来不错,但我不知道如何强制 Electron 对特定文件使用特定的 mime 类型。此外,在网络选项卡的开发者控制台中,似乎 chromium 实际上已经为我的 processor.js 假设了一个 javascript 文件。

我已经尝试使用这样的自定义协议(protocol)加载工作集

protocol.registerStandardSchemes(['worklet']);

app.on('ready', () => {
protocol.registerHttpProtocol('worklet', (req, cb) => {
fs.readFile(req.url.replace('worklet://', ''), (err, data) => {
cb({ mimeType: 'text/javascript', data });
});
});
});

然后在添加工作集时
await ctx.audioWorklet.addModule('worklet://processor.js');

不幸的是,这只以这些错误结束,然后是第一个错误

GET worklet://processor.js/0 ()
Uncaught Error :您提供的错误不包含堆栈跟踪。
...

最佳答案

如果有人感兴趣,我找到了一个 hacky 解决方案。
为了强制使用 mime 类型的 Electron/ Chrome ,我很高兴我将带有文件 api 作为字符串的工作集文件加载,将其转换为具有 mime 类型 text/javascript 的 blob,然后从中创建一个对象 url

const processorPath = isDevMode ? 'public/processor.js' : `${global.__dirname}/processor.js`;
const processorSource = await readFile(processorPath); // just a promisified version of fs.readFile
const processorBlob = new Blob([processorSource.toString()], { type: 'text/javascript' });
const processorURL = URL.createObjectURL(processorBlob);
await ctx.audioWorklet.addModule(processorURL);

希望这可以帮助任何有同样问题的人......

关于javascript - 在 Electron 中使用 AudioWorklet (DOMException : The user aborted a request),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760219/

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