Solution n° 1
Ma solution ici est de créer un iframe
<iframe src="audio/source.mp3" allow="autoplay" style="display:none" id="iframeAudio">
</iframe>
y audio
ainsi que pour les navigateurs non chromatiques
<audio autoplay loop id="playAudio">
<source src="audio/source.mp3">
</audio>
et dans mon script
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
if (!isChrome){
$('#iframeAudio').remove()
}
else {
$('#playAudio').remove() // just to make sure that it will not have 2x audio in the background
}
Solution n°2 :
Selon @Leonard, il existe également une autre solution de contournement.
Créer un iframe
qui ne joue rien juste pour déclencher l'autoplay au premier chargement.
<iframe src="silence.mp3" allow="autoplay" id="audio" style="display: none"></iframe>
bonne source pour le fichier mp3 silence.mp3
Vous pouvez ensuite lire votre fichier audio réel en toute simplicité.
<audio id="player" autoplay loop>
<source src="audio/source.mp3" type="audio/mp3">
</audio>
Personnellement, je préfère solution n° 2 parce qu'il s'agit d'une approche plus propre pour ne pas dépendre autant de JavaScript.
Mise à jour : août 2019
Solution #3
Comme alternative, nous pouvons utiliser <embed>
Pour Firefox Il semble que la lecture automatique de l'audio fonctionne et que nous n'ayons pas besoin de l'option de lecture automatique de l'audio. <embed>
car il créera un double parcours audio.
// index.js
let audioPlaying = true,
backgroundAudio, browser;
browser = navigator.userAgent.toLowerCase();
$('<audio class="audio1" src="audio.mp3" loop></audio>').prependTo('body');
if (!browser.indexOf('firefox') > -1) {
$('<embed id="background-audio" src="audio.mp3" autostart="1"></embed>').prependTo('body');
backgroundAudio = setInterval(function() {
$("#background-audio").remove();
$('<embed id="background-audio" src="audio.mp3"></embed>').prependTo('body');
}, 120000); // 120000 is the duration of your audio which in this case 2 mins.
}
De plus, si vous avez un événement de basculement pour votre audio, assurez-vous de supprimer l'événement créé. <embed>
élément pour l'audio.
Note : Après votre basculement, il recommencera depuis le début parce que le bouton <embed>
est déjà supprimé et le <audio>
l'élément jouera normalement maintenant.
$(".toggle-audio").on('click', function(event) {
audioPlaying = !audioPlaying;
$("#background-audio").remove();
clearInterval(backgroundAudio);
if (audioPlaying){
$(".audio1").play();
// play audio
}
else {
$(".audio1").pause();
}
Et maintenant assurez-vous de cacher ces <audio>
y <embed>
éléments
audio, embed {
position: absolute;
z-index: -9999;
}
Note : diplay: none
y visibility: hidden
fera le <embed>
ne fonctionne pas.
28 votes
Le fait que Google ait fait ça est absurde. Ils ont littéralement dit "eh bien, pas de musique pour votre jeu à moins qu'un utilisateur ne clique sur Play Music". Inacceptable. Je suis tellement en colère !
3 votes
@Hobbes D'accord. Il devrait au moins y avoir des exceptions. Comme je l'ai mentionné à un autre poster, j'ai une page "MUSIQUE", avec un lien de site "mymusic.html", auquel on ne peut accéder qu'avec un lien/bouton clairement intitulé "MA MUSIQUE". Il est assez absurde que quelqu'un aille sur cette page et soit surpris ou ennuyé par les échantillons de musique qui y sont diffusés. D'autant plus qu'il existe un bouton STOP MUSIC à position fixe. Cette politique est un cas de réaction excessive à des pratiques abusives.
6 votes
Randy, honnêtement, et je le dis en tant que musicien, je serait être ennuyé par la lecture d'échantillons de musique sans interaction sur une page "musique". Je m'attendrais à voir une liste de chansons, à choisir celle dont je veux écouter un extrait et à interagir avec elle pour l'écouter réellement.
1 votes
@Fox - Je suis d'accord avec vous. Depuis que j'ai fait mon OP, j'ai supprimé tout code de lecture automatique, même sur les navigateurs qui le supportent ou qui peuvent être trompés. Il est préférable de laisser le visiteur contrôler la situation.