1) ".push()" ist schlecht weil IE 5.0 das nicht kann, JS error und kein JS code geht mehr g'scheit auf deiner Seite. Besser meinarray[meinarray.length] = 'string'; , selber Effekt. Bei vielen Stats ist 5.0 leider immer noch vor 5.5; YMMV.
2) geht alert(document.images) unter IE Mac? Geht document.images['Site1'] ? oder kommt undefined zurueck? Ein bischen selber Initiative ergreifen, also alert() statements reinhauen damit du weisst wie weit er kommt im JS.
3) Verwende seit einiger Zeit folgenden Code erfolgreich:
function PreloadImages(listImages) {
if (document.images) {
if (!document.Preload) {
document.Preload = [];
}
for (var i = 0, j = document.Preload.length, li = listImages.length; i < li; i++) {
document.Preload[j] = new Image;
document.Preload[j++].src = listImages[i];
}
}
}
function AutoHover(preload) {
if (!document.getElementsByTagName) {
return;
}
var imgs = document.getElementsByTagName('img');
var i, l = imgs.length;
var j, m;
var reSwapme = /autoswap|auto-swap/;
var reIsActive = /_a\.[a-z]+/;
var reFileParts = /(.*)\.([a-z]+$)/;
var srcParts;
var listImages = [];
for (i = 0; i < l; i++) {
if (reSwapme.test(imgs[i].className) && !reIsActive.test(imgs[i].src)) {
srcParts = imgs[i].src.match(reFileParts)
imgs[i]._srcNormal = imgs[i].src;
imgs[i]._srcActive = srcParts[1] + '_a.' + srcParts[2];
listImages[listImages.length] = imgs[i]._srcActive;
imgs[i].onmouseover = function() {
this.src = this._srcActive;
}
imgs[i].onmouseout = function() {
this.src = this._srcNormal;
}
}
}
// Zusatzeinbau: Auch Images für Submit Buttons berücksichtigen.
var inputs = document.getElementsByTagName('input');
l = inputs.length;
for (i = 0; i < l; i++) {
if (reSwapme.test(inputs[i].className) && !reIsActive.test(inputs[i].src)) {
srcParts = inputs[i].src.match(reFileParts)
inputs[i]._srcNormal = inputs[i].src;
inputs[i]._srcActive = srcParts[1] + '_a.' + srcParts[2];
listImages[listImages.length] = inputs[i]._srcActive;
inputs[i].onmouseover = function() {
this.src = this._srcActive;
}
inputs[i].onmouseout = function() {
this.src = this._srcNormal;
}
}
}
if (preload) {
PreloadImages(listImages);
}
}
In dem du den Images, die eine Hover-Funktion haben, eine CSS Klasse namens autoswap (oder auto-swap) zuweist, sorgt der Javascript-Code automatisch dafuer, dass die Images geladen werden, die fuer den Hover notwendig sind. Er geht naemlich davon aus, dass das Image fuer den selben Namen hat, nur mit '_a' am Schluss. Solche Dinge muss man eben Applikationsspezifisch anpassen, sonst nix. Im window.onload rufst du einfach AutoHover(true); auf, mehr sollte net zu machen sein.
Nachteil: hovers funktionieren erst, wenn die Seite komplett geladen ist. Wenns also so schon viele Images, Scripten, Frames, Flash, etc sind, ist das wahrscheinlich nicht so gut.
Andererseits hab ichs in der Praxis zu 75% erlebt, dass Bilder umbenannt wurden, dann aber vergessen wurden in den Preload-Code aufgenommen zu werden. YMMV, HTH
Auswendig weiss ich jetzt auch nimmmer, ob _der_ Code im Mac IE geht, denke schon das er getestet wurde, weiss aber nimmer. Vielleicht ist er auch so fuer irgendwen brauchbar.