Hallo!
Abgesehen von der recht schönen Objektorientierung machst Du es Dir an einigen Stellen unnötig kompliziert:
if (aTags[i].href) { if (aTags[i].href.match(/\.mp3$/i)) {
Wozu brauchst Du das Ergebnis der RegExp?
if (!/\.mp3$/i.test(aTags[i].href || '')) { continue; }
this.insert(aTags[i]);
erfüllt gleich beide Bedingungen und ist auch noch eleganter.
if (window.onload) {
var f = window.onload;
window.onload = function () {
f();
mp3player.init();
};
} else {
window.onload = function () {
mp3player.init();
};
}
Hier kann man auch gleich eine Closure verwenden:
window.onload = function(o) { return function() {
if (o) { o(); }
mp3player.init();
}}(window.onload);
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.
Das kann nur passieren, wenn im bisherigen Onload etwas mit Verzögerung die Links verändert. In diesem Fall prüfe die Erledigung eines derartigen Scripts, bevor Du die init-Methode startest. Ansonsten solltest Du in dem Fall, in dem Du einen Link mit "insert" ersetzt, vorher nochmal nachfragen, ob es diesen überhaupt noch gibt.
Gruß, LX
RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
RFC 1925, Satz 11a: Siehe Regel 6a