Lösung Nr. 1
Meine Lösung hier ist, eine zu erstellen iframe
<iframe src="audio/source.mp3" allow="autoplay" style="display:none" id="iframeAudio">
</iframe>
und audio
Tag auch für Nicht-Chrome-Browser
<audio autoplay loop id="playAudio">
<source src="audio/source.mp3">
</audio>
und in meinem script
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
if (!isChrome){
$('#iframeAudio').remove()
}
else {
$('#playAudio').remove()
}
Lösung 2:
Laut @Leonard gibt es dafür auch eine andere Problemumgehung
Erstellen Sie eine iframe
, die nichts spielt, nur um die automatische Wiedergabe beim ersten Laden auszulösen.
<iframe src="silence.mp3" allow="autoplay" id="audio" style="display: none"></iframe>
gute Quelle für die MP3-Datei Silence.mp3
Spielen Sie dann ganz einfach Ihre echte Audiodatei ab.
<audio id="player" autoplay loop>
<source src="audio/source.mp3" type="audio/mp3">
</audio>
Persönlich bevorzuge ich Lösung Nr. 2, weil es ein sauberer Ansatz ist, wenn man sich nicht so sehr auf JavaScript verlässt.
Update August 2019
Lösung Nr. 3
Als Alternative können wir verwenden <embed>
Für Firefox
Es scheint, dass die automatische Audiowiedergabe funktioniert, sodass wir das <embed>
Element nicht benötigen , da dadurch doppeltes Audio ausgeführt wird.
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);
}
Auch wenn Sie ein Umschaltereignis für Ihr Audio haben, müssen Sie das erstellte <embed>
Element für Audio entfernen .
Hinweis: Nach dem Umschalten wird es von Anfang an neu gestartet, da das <embed>
bereits gelöscht wurde und das <audio>
Element jetzt wie gewohnt abgespielt wird.
$(".toggle-audio").on('click', function(event) {
audioPlaying = !audioPlaying;
$("#background-audio").remove();
clearInterval(backgroundAudio);
if (audioPlaying){
$(".audio1").play();
}
else {
$(".audio1").pause();
}
Und jetzt stellen Sie sicher, dass Sie diese <audio>
und <embed>
Elemente ausblenden
audio, embed {
position: absolute;
z-index: -9999;
}
Hinweis: diplay: none
und visibility: hidden
bewirkt, dass das <embed>
Element nicht funktioniert.