nam: Race Condition?

Beitrag lesen

Hallo

Ich arbeite an einer Website für eine Band. Nun habe ich ein Script zusammengestöpselt, dass links auf '.mp3' sucht und diese durch einen kleinen Flash-Player ersetzt, so dass man die Musik direkt auf der Seite hören kann.

  
var mp3player = (function () {  
  
	var aTags;  
	  
	return {  
		init : function () {  
			var key, l, i;  
			aTags = document.getElementsByTagName('a');  
			l = aTags.length;  
			for (i = 0; i <= l; i++) {  
				if (aTags[i].href) {  
					if (aTags[i].href.match(/\.mp3$/i)) {  
						mp3player.insert(aTags[i]);  
					}  
				}  
			}  
		},  
		insert: function (tag) {  
			var flobj = null,  
			param = null;  
			  
			flobj = document.createElement('object');  
			flobj.type = 'application/x-shockwave-flash';  
			flobj.data = 'js/player_mp3_mini.swf';  
			flobj.width = '200';  
			flobj.height = '20';  
			  
			param = document.createElement('param');  
			param.name = 'movie';  
			param.value = 'js/player_mp3_mini.swf';  
			flobj.appendChild(param);  
			  
			param = document.createElement('param');  
			param.name = 'bgcolor';  
			param.value = '#eeeeee';  
			flobj.appendChild(param);  
			param = document.createElement('param');  
			param.name = 'FlashVars';  
			param.value = 'mp3=' + tag.href;  
			flobj.appendChild(param);  
			tag.parentNode.replaceChild(flobj, tag);  
		}  
	};  
  
}());  
  
if (window.onload) {  
	var f = window.onload;  
	window.onload = function () {  
		f();  
		mp3player.init();  
	};  
} else {  
	window.onload = function () {  
		mp3player.init();  
	};  
}

Das Problem ist nun, dass sich aTags, bzw. aTags.length während des Durchlaufs der for-Schleife ändert (Race Condition) und dann nicht alles ersetzt wird.

Wie macht man das richtig?

Danke und Gruss,
Mathias