我正在尝试在我的电子应用程序中使用 AudioWorklet 进行计量等。在开发模式下执行时工作正常,其中工作集由快速开发服务器提供服务,例如http://localhost:3000/processor.js http://localhost:3000/processor.js。
但是,如果我尝试在产品模式下运行该应用程序,该文件将在本地提供,如 file://tmp/etc/etc/build/processor.js,并且在开发人员控制台中,我什至可以看到该文件正在正确预览,但我收到此错误消息:
未捕获(承诺中)DOMException:用户中止请求。
我之前看到别人也遇到过类似的问题在这里 https://stackoverflow.com/questions/49972336/audioworklet-error-domexception-the-user-aborted-a-request/51469624#51469624但不幸的是我在堆栈溢出上的声誉还不够高,无法直接发表评论。将 mime 类型更改为 application/javascript 或 text/javascript 的建议听起来不错,但我不知道如何强制 Electron 对特定文件使用特定的 mime 类型。此外,在网络选项卡的开发者控制台中,似乎 chromium 实际上已经为我的 process.js 假设了一个 javascript 文件。
我已经尝试使用这样的自定义协议加载工作集
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');
不幸的是,这只以这些错误结束,然后是第一个错误
获取工作集://processor.js/0 ()
未捕获的错误:您提供的错误不包含堆栈跟踪。
...