• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Problem mit Audio und alert() in Chrome

J

j-l-n

Guest
Auf das wesentliche reduzierter Code-Auszug:
HTML:
<button id="notify">Notify</button>
...
<script>
function playAudio(){
	function createAudio(ogg, mp3){
		var d = new Date();
		var randomString = "?" + d.getTime();
		var audio, audioSource;
		audio = document.createElement("audio");
		audio.preload = "auto";
		audioSource = document.createElement("source"); //browser with support for ogg
		audioSource.type = "audio/ogg";
		audioSource.src = ogg + randomString;
		audio.appendChild(audioSource);
		audioSource = document.createElement("source"); //browser with support for mp3
		audioSource.type = "audio/mpeg";
		audioSource.src = mp3 + randomString;
		audio.appendChild(audioSource);
		return audio;
	}
				
	var sound = createAudio("alert.ogg", "alert.mp3");
	sound.onplay = function(){
		alert("Irgendeine Meldung");
	}
	sound.play();
}
document.getElementById("notify").onclick = playAudio;				
</script>

In Firefox funktioniert dieses Skript - in Chrome hingegen wird das Audio immer erst nach dem Schließen des alert() abgespielt und manchmal sogar gar nicht. Wieso?
Fehlerkonsole ist auch leer.
 
In Firefox funktioniert dieses Skript - in Chrome hingegen wird das Audio immer erst nach dem Schließen des alert() abgespielt und manchmal sogar gar nicht.
nagut, ein alert ist ja auch was besonderes (was im produktiveinsatz idR. auch nicht vorkommt), da diese funktion ein echten modalen dialog erzeugt.
was da im hintergrung noch läuft, ist nicht definiert und auch nicht so einfach zu entscheiden.
der ff hatte mal, ka ob das noch so ist, sogar noch weiter js abgearbeitet (aus laufenden timeouts).
der Chrome wird vermutlich auf das ende des callbacks warten und dann das abspielen beginnen. das callback kommt aber nicht zum ende, bis du den alert wegklickst.
ff startet enweder erst das abspielen oder parallel mit dem callback.
 
Also ich verstehe das Verhalten von Chrome an dieser Stelle überhaupt nicht... In Firefox läuft es tadelfrei - sei es mit oder ohne Timeout. Im Chromw funktioniert es zwar mit Timeout auch problemlos, allerdings erst ab ~100ms.
Es würde so schon taugen - Hauptsache, es funktioniert - aber gibt es denn keine „sauberere” Lösung?
 
Ich verstehe ehrlich gesagt eigentlich nicht ganz, wozu du während der Sounsausgabe noch ein Alert ausgibst aber ich befürchte es könnte sich um ein Chrome-spezifisches Problem handeln.
 
So funktioniert es zwar jetzt. Aber gibt es denn keine sauberere Lösung?

- - - Aktualisiert - - -

Bin endlich nach langem Suchen auf die Lösung gekommen:
Code:
sound.play();
sound.onloadeddata = function(){
	alert("Irgendeine Meldung");
}
 
Zurück
Oben