Webspace schmiert wegen Javascript ab? Häää?
Headdy
- javascript
0 Joachim0 Gunnar Bittersmann0 Beat
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
Hi,
Ohne die beiden Alerts schmiert mit dem Internet-Explorer der ganze Webspace für 30Minuten ab.
Javascript lässt sicher keinen Webspace abschmieren, denn es findet im Client statt. Möglicherweise laufen aber Deine Schleifen Amok und feuern eine Unzahl von Requests an den Server, die diesen in die Knie zwingen. Ich würde mal fiddler installieren, und die Requests überwachen, die IE losschickt.
Gruesse, Joachim
@@Headdy:
Da gibt es auch garkein Problem
Doch. Eine Navigation, die nur mit JavaScript funktioniert, ist ein Problem.
Du schließt etliche Besucher von deiner Website aus. Darunter solche, die du bestimmt nicht ausschließen willst. [DIALOG-ROBOT]
Um ein dynamisches Menü zu erstellen, benötigt man für moderne Browser auch gar kein JavaScript. Lediglich für IE 6 muss man etwas nachhelfen: mit JavaScript [http://de.selfhtml.org/css/layouts/navigationsleisten.htm@title=SELFHTML] oder Hacks in conditional comments [Nicholls].
da das alles schon wochenlang läuft...
Und zwar ver im Sande.
Live long and prosper,
Gunnar
Da gibt es auch garkein Problem
Doch. Eine Navigation, die nur mit JavaScript funktioniert, ist ein Problem.
Aber nur so lange, wie man Javascript erlaubt.
SCNR
mfg Beat