Hallo liebe Forumler
Habe hier ein Problemchen der ganz besonderen Art wie die Überschrift schon erahnen lässt.
Um ein Pulldownmenü zu erzeugen mache ich folgendes:
In jede meiner php-Seiten include ich innerhalb des html-Heads ein php-Skript. Dieses beinhaltet einige relevante Variablen (für den Menübaum) und einen einfachen echo-Befehl, der wiederum ein Javascript lädt:
Jede Seite:
<html>
<head>
<?php include(.../pulldownmenu.php)?>
</head>
.....
pulldownmenu.php:
<?php
....
echo "<script src='".$temp_pathlevel."pulldownmenu.js' type='text/javascript'></script>";"
?>
Da gibt es auch garkein Problem, da das alles schon wochenlang läuft...
Jetzt sollen (wenn man mit dem Cursor über die Pulldownmenü-Zeilen fährt), diese Menüeinträge grau hinterlegt werden. Also ein ganz einfacher onmouseover, der den style.background-image-Attribut des td-Elements (Das Pulldownmenü ist eine Tabelle) ändert. Die Codeschnipsel sehen so aus:
function hoverPdmenuIn(submidx,pdmenuidx){
//1.ALERT
window.alert("bin drin,"+submidx+","+pdmenuidx);
if(submidx == 0) parent.parent.submenuframe.hovertdIn0();
else if(submidx == 1) parent.parent.submenuframe.hovertdIn1();
else if(submidx == 2) parent.parent.submenuframe.hovertdIn2();
else if(submidx == 3) parent.parent.submenuframe.hovertdIn3();
else if(submidx == 4) parent.parent.submenuframe.hovertdIn4();
else if(submidx == 5) parent.parent.submenuframe.hovertdIn5();
//pdmenuelemsarr[submidx][pdmenuidx][1] ist TD-Objekt
pdmenuelemsarr[submidx][pdmenuidx][1].style.backgroundImage =
"url("+pathstring+parent.imgpdmenuselectbgsrc+")";
//2.ALERT
window.alert(pdmenuelemsarr[submidx][pdmenuidx][1].style.backgroundImage);
for(i=0; i<pdmenuelemsarr[submidx].length; i++){
if(i != pdmenuidx)
pdmenuelemsarr[submidx][i][1].style.backgroundImage =
"url("+pathstring+parent.imgmenubgsrc+")";
}
}
Das ganze macht im Firefox keinerlei Probleme, in der Javascript-Konsole steht nix, das Pulldown-Menü fluppt einfach und sieht schön aus. Die obige Funktion macht nichts anderes als:
1.else if(submidx == 1) parent.parent.submenuframe.hovertdIn1();... die Funktion innerhalb des Obermenüs ändert eine Hintergrundgrafik darin, mehr nicht.
2.Hintergrundgrafik des Eintrags markieren, über dem der Cursor ist.
3.bei allen anderen Menüpunkten, auf denen der Cursor momentan nicht ist, die ursprüngliche Grafik laden.
Jetzt kommts:
Hier ist überall nur Javascript-Code oder?
Beim überfahren der Menüs werden nur Grafiken aus Arrays geladen und style-Attribute geändert. Fahre ich im Internet-Explorer über einen Pulldown-Menü-Eintrag, wird die Grafik nicht geladen und promt schmiert der ganze Webspace von United-Domains ab, auch mein FTP-Programm trennt die Verbindung. In der IE-Statusleiste steht dann "1Element wird noch geladen...", oder so ähnlich. also genau dieses Hintergrundbild. Das kann er nicht mehr laden, da dann bereits die Webseite nicht mehr erreichbar ist. Wenn ich die beiden ALERTS im obigen Code nicht auskomentiere (sie also erfolgen), schmiert der Webspace nicht ab und die Hintergrundgrafik wird geladen. Ohne die beiden Alerts schmiert mit dem Internet-Explorer der ganze Webspace für 30Minuten ab.
...style.backgroundImage="url("+pathstring+parent.imgpdmenuselectbgsrc+")";
imgpdmenuselectbgsrc ist ein string, der im obersten Frameset global gespeichert ist.
D.h. hier werden keine Mysql-Daten geholt, keine Seitenpfade geändert, und nix.... nur javascript (nur ein mouseover). Wenn die Ausführung durch die Alerts verzögert wird (man muss ja erst OK klicken) funktionierts.
Was ist das für ein krasses Problem?
Wie kann der IE + Javascript die ganze Seite lahmlegen? :-)
Sendet der IE wegen des Skripts vielleicht eine Angrifftsmeldung an den Server, sodass dieser die Seite für 30Minuten sperrt? Falls ja, was ist in meinem Skript so gefährlich?
pathstring sieht je nach rootlevel so aus: "./" oder "./../" oder "./../../". Vielleicht verweist das auf eine Ebene unterhalb des Webroot-Levels oder wie man das nennt. Aber der Alert gibt mir immer genau den Pfad an, wo auch die Grafik liegt...
Danke für eure Mühe, denke das ist ein interessantes Problem.
Grüße
Mathias