Я управляю проектом Electron (v2.0.3), который выполняет сценарии в веб-обозрении.Одним из сценариев является воспроизведение локального аудиофайла в определенных условиях.
Однако воспроизведение аудио отклоняется, если оно вызывается внутри веб-просмотра, и работает нормально, если вызывается в index.html
, или если онлайн-аудиофайл воспроизводится вместо локального.
Я установил для nodeIntegration
веб-просмотра значение true и убедился, что веб-просмотр не отключен.Я думаю, что это не проблема политики автоматического воспроизведения, потому что видео 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()
обещание отклоняется и отображается сообщение об ошибке:
NotSupportedError: Failed to load because no supported source was found.
Я когда-то думал о вероятности ограничений из разных источников, но, похоже,не потому, что я могу воспроизводить онлайн аудиофайлы из разных доменов, как я уже говорил ранее.
Как я могу это исправить? Может ли это быть ошибкой? Или я забываю о каких-то ограничениях? Любая информация будет оценена. Спасибо.
Редактировать: Согласно моему дальнейшему тесту, эта ошибка также возникает, когда я вызываю executeJavaScript()
на BrowserWindow.webContents
, созданном main.js
. Так что кажетсякак ограничение о executeJavaScript
, а не о сетиМЭН.
В документах упоминается ограничение userGesture
, которое можно настроить с помощью второго параметра executeJavaScript
.Тем не менее, это не работает для меня, все же.