Свойство автозапуска в аудиоэлементе работает спорадически - PullRequest
5 голосов
/ 13 марта 2020

Я попытался добавить функцию автозапуска в проигрыватель, как в примере с w3school: https://www.w3schools.com/tags/att_audio_autoplay.asp

Я скопировал и вставил код из примера в индексный файл на этом сервере , удалите ogg player, добавьте mp3-файл в том же месте, что и индексный файл, и убедитесь, что имя mp3-файла совпадает с именем в теге источника.

Ради прозрачности, это код:

 let x = document.getElementById("myAudio");
        var test_autoplay = document.getElementById("myAudio").autoplay;
        console.log('autoplaying:    ', test_autoplay);
<!DOCTYPE html>
    <html>
    <body>
    
    <h1>The audio autoplay attribute</h1>
    
    <p>Click on the play button to play a sound:</p>
    
    <audio id="myAudio" controls autoplay>
      <source src="elrio.mp3" type="audio/mpeg">
      Your browser does not support the audio element.
    </audio>
    
    </body>

    </html>

Это должно быть довольно простым делом. Однако в мобильных устройствах это не работает. Я должен нажать на кнопку, чтобы включить звук. В настольных устройствах иногда он воспроизводится сразу после загрузки страницы, а иногда - нет.

Я проверил ошибки консоли, их нет. Вкладка «Сеть» также не отображает никаких ошибок.

Я попытался распечатать свойство autoplay с помощью javascript следующим образом:

<script>
    let x = document.getElementById("myAudio");
    var test_autoplay = document.getElementById("myAudio").autoplay;
    console.log('autoplaying:    ', test_autoplay);
</script>

Каждый раз, когда страница загружалась, значение test_autoplay было истинным, даже когда оно фактически не воспроизводилось ,

Я прочитал ссылку в комментарии Лоуренса Чероне и понял, почему свойство autoplay не рекомендуется. Тем не менее, в некоторых случаях (например, на музыкальных сайтах musi c) я думаю, что автозапуск должен быть разрешен. Кроме того, я бы понял, если бы автозапуск не сработал. Я пытаюсь понять, как на этой простой странице, которую я скопировал из w3schools, иногда она работает, а иногда нет.

Версия ОС: Windows 10. Браузер: Google Chrome, Версия 80.0 .3987.132 (Официальная сборка) (64-битная версия)

1 Ответ

3 голосов
/ 17 марта 2020

Это хитрый. Я могу воспроизвести то, что ты видишь, но, думаю, я понял это.

Если вы разрешите сайту воспроизводить музыку c в течение более 7 секунд, это позволит автоматически воспроизвести следующий визит. Если вы останавливаете воспроизведение, закрываете или перезагружаете вкладку до истечения 7 секунд, сайт теряет возможность автоматического воспроизведения до тех пор, пока вы не воспроизведете звук в течение более 7 секунд снова .

Chrome autoplay

Это поведение указано c до Chrome (которое вы упомянули, что используете). Chrome ведет подсчет того, на каких сайтах пользователю разрешено проигрывать аудио. Это хранится в Индексе вовлечения СМИ. Вы можете увидеть счет Chrome, набрав chrome://media-engagement/ в адресной строке. Если вы разрешили своему сайту воспроизводить аудио более 7 секунд, вы должны увидеть его там. Более подробную информацию о поведении Chrome в отношении автоигры можно найти здесь Индекс вовлеченности СМИ - , описанный здесь , хотя часть документа больше не актуальна из-за изменений в Chrome.

Javascript проверка разрешения автозапуска

Кроме того, приведенный ниже фрагмент кода javascript, похоже, пытается проверить, включен ли autoplay.

document.getElementById("myAudio").autoplay

На самом деле это проверяет только то, установлено ли свойство autoplay для тега HTML, что всегда будет.

Чтобы проверить, разрешен ли автозапуск, используйте этот фрагмент:

document
  .getElementById('myAudio')
  .play()
  .then(() => console.log('autoplay success!'))
  .catch(e => console.log(e))

Информация, связанная с данной

Этот ответ описывает способ "обмануть" Chrome в всегда автоматическое воспроизведение, хотя я лично не проверял это.

...