gpt4 book ai didi

javascript - Audio.play() 在 Electron webview 中被 NotSupportedError 拒绝

转载 作者:行者123 更新时间:2023-12-04 00:11:55 31 4
gpt4 key购买 nike

我正在运行一个 Electron (v2.0.3) 项目,它在 webview 中执行脚本。脚本之一是在条件下播放本地音频文件。

但是,如果在 webview 中调用音频播放将被拒绝,而如果在 index.html 中调用则工作正常或者如果播放在线音频文件而不是本地音频文件。

我已经设置了 nodeIntegration将 webview 设置为 true,并确保 webview 没有静音。我想这不是关于自动播放策略的问题,因为如果我将它们加载到 webview 中,YouTube 视频和在线音频(例如 http://www.pacdv.com/sounds/ambience_sounds/air_hum.wav)可以完美运行。

此外,文件路径和文件本身也没有问题,因为当我直接在 index.html 中执行脚本时效果很好。 .

这是我的 index.html :

<head>
<script>
function init() {
web.addEventListener("dom-ready", () => {
web.executeJavaScript('<my-script>');
});
}
</script>
</head>
<body onload="init(); ">
<webview id="web" src="http://www.google.com"
style="width: 800px; height: 600px; "
webpreferences="nodeIntegration=true"></webview>
</body>

这是 <my-script>的内容:
let path = `file://${require("electron").remote.app.getAppPath()}/xxx.mp3`; 
new Audio(path).play().then().catch(ex => {
document.body.innerHTML = ex;
});

Audio.play() , promise 被拒绝并显示错误消息:
NotSupportedError: Failed to load because no supported source was found.

我曾经考虑过跨域限制的可能性,但似乎不是因为我可以像我之前所说的那样播放来自不同域的在线音频文件。

我怎样才能解决这个问题?这可能是一个错误吗?还是我忘记了一些限制?任何信息,将不胜感激。 谢谢。

编辑:根据我的进一步测试,我调用 executeJavaScript()时也会出现这个错误在 BrowserWindow.webContents创建者 main.js .所以这似乎是关于 executeJavaScript 的限制而不是网页 View 。

docs提到了 userGesture限制,可以通过 executeJavaScript的第二个参数进行配置.但是,它仍然对我不起作用。

最佳答案

在应用程序启动之前添加这一行

app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');

关于javascript - Audio.play() 在 Electron webview 中被 NotSupportedError 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53887973/

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