我正在运行一个 Electron (v2.0.3) 项目,它在 web 视图中执行脚本。其中一个脚本是在一定条件下播放本地音频文件。
但是,如果在 Web 视图中调用音频播放,则音频播放会被拒绝,而如果调用index.html或播放在线音频文件而不是本地音频文件,则音频播放可以正常工作。
我已将nodeIntegrationwebview 设置为 true,并确保 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>
Run Code Online (Sandbox Code Playgroud)
以下是 的内容<my-script>:
let path = `file://${require("electron").remote.app.getAppPath()}/xxx.mp3`;
new Audio(path).play().then().catch(ex => {
document.body.innerHTML = ex;
});
Run Code Online (Sandbox Code Playgroud)
之后Audio.play(),promise 被拒绝并显示错误消息:
NotSupportedError: Failed to load because …Run Code Online (Sandbox Code Playgroud)