Audio.play () отклонен с NotSupportedError в веб-просмотре Electron - PullRequest
0 голосов
/ 21 декабря 2018

Я управляю проектом 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.Тем не менее, это не работает для меня, все же.

1 Ответ

0 голосов
/ 21 марта 2019

добавить эту строку перед запуском приложения

app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...