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