FAQ zum Baumstruktur-Menü
(häufig gestellte Fragen - und die Antworten dazu)
Hot-Tipps:
Version 1.41 (auf www.js-menue.de):
Version 1.41 als auch 15beta3/4 (auf Anfrage bei Ansgar Federhen)
Die Datei nojsmenu.htm enthält das vollständig geöffnete Menü für Browser mit abgeschaltetem JavaScript (ggf. auch für Opera, wo das Menü nicht funktioniert, siehe Script unter Opera zum Laufen bringen).
Gemäß Dokumentation zur Version 1.41 (erweitert um javascript:-Hinweis, "none" gelöscht):
- Die fertige index.htm in einen Browser laden (mit JavaScript-Unterstützung)
- klicke dann links unten auf 'Alle Verzeichnisse auf' (falls Du den klappFrame deaktiviert hast: alle Verzeichnisse von Hand öffnen oder in Browsereingabezeile eingeben: "javascript:allesaufzu(1)" )
- dann den Quelltext des Menüs anzeigen lassen (rechte Maustaste, 'Rahmenquelltext anzeigen' bzw. 'Quelltext anzeigen').
- Jetzt den angezeigten Text in eine leere Datei des Editors kopieren
- bei Netscape ggf. die erste Zeile mit <BASE HREF ...> löschen
- alle JavaScript-Aufrufe <A HREF="javascript: ... >) löschen bzw. durch den entsprechenden Verzeichnislink ersetzen
- die Datei dann als nojsmenu.htm speichern.
Tipps:
- Bei Version 1.41 sollte man immer KlapFrame = "1" verwenden. Dann läßt sich das Menü in einem Rutsch öffnen.
- Ersatzweise kann man auch "javascript:allesaufzu(1)" in die Browsereingabezeile eingeben!
- Bei der Version von Frank Bergermann gibt es außerdem noch folgende Möglichkeiten, das Menü vollständig zu öffnen:
- Doppelklick auf die Wurzel
- Freischwebendes Icon neben der Wurzel benutzen (AllesAufZuIcon= "1")
Bisher ungetestet:
function changeFrames(url,frame,url2){ // Ändert url und url eines 2. Frames gleichzeitig. // Bisher noch nicht getestet. // Beispiel-Aufruf in URL: "javascript:parent.changeFrames('doku/doku.htm#top','meinFrame','xyz.htm')" frames[ZielFrame].location.href=url; frames[frame].location.href=url2; }Ansprechen mit <URL>= "javascript:parent.changeFrames('seite1.htm','meinFrame2','seite2.htm')" und <ZIEL>=""
- Um JavaScripte in das Menü mit einzubinden, setzt man diese in index.htm innerhalb <head>...</head>, also meist nach den Meta-Tags.
- HTML, um auf das so eingebundene Script zuzugreifen, setzt man in prefixHTML oder suffixHTML.
- Dabei muß man den Pfad von Funktionsaufrufen anpassen (vor jeden Funktionsaufruf "parent." setzen)
- Beispiel: JavaScript/Sound/musikmenu.htm
- Sonderfall: wenn man auf JS-Menü-Variablen zurückgreifen will, muß man auch "parent." davor setzen. Siehe Menüeintrag "Seite in neues Fenster"
- Wenn man versucht, das komplette Script in prefixHTML oder suffixHTML zu setzen, läuft es oft im MSIE, aber NS4 schneidet es heraus. Zudem läßt sich dann bei NS4 nicht mehr der Rahmenquelltext anzeigen. Statt dessen wird die index.htm angezeigt. Erstaunlicherweise funktionieren Scripts in Scripts in einfachen Dateien, im JS-Menü jedoch nicht mehr. (Vieleicht geht Script in Script nicht in einem Frame oder in dynamisch geschriebenem HTML-Code?)
JS-Menü als *.js-File (nur für neuere Browser geeignet, alte Browser kennen das nicht, dort bleibt die Seite leer)
Man kann das Menü-Script auch in eine externe *.js-Datei auslagern.
Hinweis:
Diese Methode wurde bewußt nicht als Standard gewählt, da sie erst ab NN3/IE4 unterstützt wird (laut SelfHTML > JavaScript > JavaScript in HTML > JavaScripts in separaten Dateien).Wer es dennoch möchte, hier eine Anleitung:
- <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
in
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript" SRC="jsmenue.js">
ändern- HTML-Kommentarzeichen löschen:
<!--
und
//-->
(vor "</script>", nach "</script>" suchen lassen)- Text zwischen "<script ...>" und "</script>" markieren und in eine neue Textdatei einfügen, diese als "jsmenue.js" speichern.
- Dabei bleiben die Tags <script ...>" und "</script>" in index.htm stehen, nicht in der *.js-Datei.
Menüeintrag "Seite in neues Fenster"
Wenn man einen Link haben möchte, mit dem man das Dokument im rechten Fentster in ein neues, leeres Fenster lädt, so kann man folgenden Menüeintrag benutzen (möglichst als letzten einfügen):
mD.neu(new LE("root","Seite in neues Fenster","javascript:var rechts = unescape(parent.frames[parent.ZielFrame].window.location.href);var popUp = window.open(rechts, 'new', 'toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=720,height=550,left=22,top=22');popUp.window.focus();// Dank an http://www.free-solutions.de","","fenster.gif","Öffnet das Dokument im rechten Frame in einem neuen Fenster. Funktioniert allerdings nicht bei allen Seiten mit JavaScript."))
Hier wurde die kompette Funktion in den Link gepackt. Außerdem wurde nicht nur der frame-Aufruf mit parent. ergänzt, sondern ebenso der Zugriff auf die Menü-Variable ZielFrame.
In der Version von Frank Bergermann ist dafür bereits eine spezielle Funktion eingeführt, der Menüeintrag lautet dann nur noch:
mD.neu(new LE("root","Seite in neues Fenster","javascript:parent.neuesfenster()","","fenster.gif","Öffnet das Dokument im rechten Frame in einem neuen Fenster. Funktioniert allerdings nicht bei allen Seiten mit JavaScript."))
Menüeintrag "Quelltext rechte Seite"
Läuft unter MSIE und NS4, nicht NS6.01.
Für Version 1.41 und 15beta3/4:
- mD.neu(new LE("root","Quelltext rechte Seite","javascript:var loc=parent.frames[parent.ZielFrame].window.location;var href=loc.href;loc.replace('view-source:'+href);/* läuft nicht bei NS6.01 */ if(navigator.appName.indexOf('Netscape') > -1){/* NS4 braucht Verzögerung */setTimeout('loc.replace(href)',1000)}else /* MS braucht direkte loc-Variable */loc.replace(href)","","text.gif","Ruft den Quelltext der rechten Seite auf."))
Für Version von Frank Bergermann:
- mD.neu(new LE("root","Quelltext rechte Seite","javascript:parent.quelltext()","","text.gif","Ruft den Quelltext der rechten Seite auf."))
Menüeintrag "Rechte Seite zu Favoriten"
Für Version 1.41 und 15beta3/4:
- mD.neu(new LE("root","Rechte Seite zu Favoriten","javascript:if(navigator.appName.indexOf('Netscape') != -1){alert('Funktioniert nicht mit dem Netscape Navigator.')}else{window.external.AddFavorite(parent.frames[parent.ZielFrame].window.location.href)}","","vzzufav.gif","Fügt die rechte Seite den Favoriten hinzu (Dialogbox). Nur MSIE."))
Für Version von Frank Bergermann:
- mD.neu(new LE("root","Rechte Seite zu Favoriten","javascript:parent.favoritenseite()","","vzzufav.gif","Fügt die rechte Seite den Favoriten hinzu (Dialogbox). Nur MSIE."))
Auf JavaScript-Funktionen des Menüs zugreifen
Beste Lösung:
<a href="javascript:parent.funtkionsname()" target="menuFrame">Linktext</a>.
Wichtig ist dabei die Angabe target="menuFrame".
Beispiele: Alle Ordner zuklappen Alle Ordner aufklappenDas gleiche bei Buttons geht nicht, dort kann man kein Target angeben. Aber der Timer des übergeordneten Fensters hilft aus:
onclick="var f='Funktion()';parent==self?opener.parent.setTimeout(f,1):parent.setTimeout(f,1)"
Theorien diverser Möglichkeiten:
- a) mit ganz normalen Links: href="javascript:Pfad.Funktion()" target="menuFrame"
- b) mittels Ereignisfunktionen, z. B. onClick="Pfad.Funktion()". Dabei ist folgendes zu beachten:
- Keine Target-Angabe möglich. Achtung: setzt Ausgangspfad des Menüs auf den Ordner der Datei mit der Funktionsaufruf, sollte daher im gleichen Ordner wie das Menü stehen, sonst funktioniert das Menü nicht mehr!
- in SelfHTML nachlesen, ob die Ereignisfunktion bei dem verwendeten Element (z. B. Link, Button, ...) auch von beiden Browsern unterstützt wird. Netscape z. B. unterstützt hauptsächlich Links, Buttons weniger (z. B. kein onMouseover bei Buttons)
- Siehe SelfHTML > JavaScript > Sprachelemente (nicht Objekt-Referenz) > Event-Handler > on...
Dabei nicht auf die Symbole achten, sondern auf die erlaubten HTML-Tags!- ausprobieren, ob es auch nur mit Tastatur (ohne Maus, nur mit Tab-Taste) geht. Was bei der Maus onMouseover= und onMouseout= ist, entspricht bei der Tastatur ca. onFocus= und onBlur=.
- Pfad: Pfad vom Frame, wo der Funktionsaufruf steht, zum Frame mit dem Script. Das Baumstrukturmenü-Script erzeugt die Unterframes "menuFrame", "seiteFrame" und ggf. "klappFrame", und steht somit in einer Eltern- (parent-) Beziehung dazu. Beispiele:
- Datei wird im rechten Frame ("seiteFrame") angezeigt: Pfad="parent."
- Datei wird in einem neuen Fenster angezeigt, aber vom Menü geöffnet:
- mit target="menuFrame": Pfad="parent."
- ohne target="menuFrame": Pfad="opener.parent."
- universell 1: "parent.location.href==self.location.href?opener.parent.Funktion():parent.Funktion()"
(Nachteil: Funktion muß 2 x angegeben werden)- universell 2: "parent.Funktion()" target="menuFrame"
(Nachteil: was ist bei onXXX-Funktionen, klappt das mit dem Target???)- Funktion(): Groß-/Kleinschreibung muß exakt übereinstimmen, Klammern nicht vergessen!
- target="menuFrame":
- läßt man das target weg, muß man trennen, ob der Funktionsaufruf im rechten Frame erfolgt (Pfad="parent.") oder aus einem neuen Fenster (Pfad="opener.parent.")
- läßt man das target weg, ändert sich der Ausgangspfad des Menüs. Benutzt man eine Funktion, die einen Neuaufbau des Menüs auslöst, findet das Menü die Bilder und Dateien nicht mehr.
- Achtung: Wenn die Datei mit dem Funktionsaufruf in einem anderen Verzeichnis als das Menü selbst steht, so wird dieser Verzeichnispfad als Basispfad für die aufgerufene Funktion genommen. Für die Beispiele heißt das: da der Funktionsaufruf aus einem anderen Verzeichnis erfolgt, findet das Menü seine Dateien nicht mehr (Bilder, CSS-Datei, Dateien, auf die die Menüeinträge verweisen). Abhilfe: Zurück-Button des Browsers, Datei ins Hauptverzeichnis legen oder Funktionen benutzen, die sich nicht auf das Menü auswirken (z. B. Funktion Datum).
- Beispiele (da diese Datei nicht im Hauptverzeichnis liegt, benutzen Sie anschließend bitte den Zurück-Button des Browsers)):
- a) innerhalb href:
- Funktionsaufruf aus dem rechten Frame (mittels href="javascript:parent.Funktion()"):
Alle Ordner zuklappen Alle Ordner aufklappen
(funktioniert nur, wenn diese Seite im rechten Frame steht)
Achtung: setzt Ausgangspfad des Menüs auf den Ordner der Datei mit der Funktionsaufruf, sollte daher im gleichen Ordner wie das Menü stehen, sonst funktioniert das Menü nicht mehr!
Klicken Sie bitte sooft auf ZURÜCK, bis die Bilder wieder angezeigt werden.- Funktionsaufruf aus einem neuen Fenster (ZIEL=_blank):
Alle Ordner zuklappen Alle Ordner aufklappen (mittels href="javascript:opener.parent.Funktion()")
(funktioniert nur, wenn diese Seite in einem neuen Fenster steht)
Achtung: setzt Ausgangspfad des Menüs auf den Ordner der Datei mit der Funktionsaufruf, sollte daher im gleichen Ordner wie das Menü stehen, sonst funktioniert das Menü nicht mehr!
Klicken Sie bitte sooft auf ZURÜCK, bis die Bilder wieder angezeigt werden.- Funktionsaufruf universell 1 (mittels href="javascript:parent==self?opener.parent.Funktion():parent.Funktion()"):
Alle Ordner zuklappen Alle Ordner aufklappen
(funktioniert sowohl aus rechtem Frame als auch aus neuem Fenster)
Achtung: setzt Ausgangspfad des Menüs auf den Ordner der Datei mit der Funktionsaufruf, sollte daher im gleichen Ordner wie das Menü stehen, sonst funktioniert das Menü nicht mehr!
Klicken Sie bitte sooft auf ZURÜCK, bis die Bilder wieder angezeigt werden.- Funktionsaufruf universell 2 (mittels href="javascript:parent.Funktion()" target="menuFrame"):
Alle Ordner zuklappen Alle Ordner aufklappen
(funktioniert sowohl aus rechtem Frame als auch aus neuem Fenster)
(Ausgangspfad des Menüs bleibt erhalten, Dateiordner egal, bisher beste Variante)- b) mittels Event-Handler onXXX="parent==self?opener.parent.Funktion():parent.Funktion()" (z. B. für Buttons)
Achtung: 1. und 2. setzten Ausgangspfad des Menüs auf den Ordner der Datei mit der Funktionsaufruf, sollte daher im gleichen Ordner wie das Menü stehen, sonst funktioniert das Menü nicht mehr!
Klicken Sie bitte sooft auf ZURÜCK, bis die Bilder wieder angezeigt werden.
Abhilfe:
- Datei ins gleiche Verzeichnis setzen wie index.htm, dann ändert sich der Ausgangspfad des Menüs nicht.
- Oder: 4. verwenden.(Gewünscht von zatrix aus dem JS-Menü-Forum, aber höchst wahrscheinlich auch schon von vielen Forum-Teilnehmern vorher.)
Menü nachladen, wenn eine Seite nicht durch das Menü aufgerufen wurde
Dazu muß man in jede Seite ein kleines Script einbauen, innerhalb <head>...</head>.
Zu empfehlen sind Version mit Link und Version mit externem Skript. Letztere läßt sich jederzeit anpassen, läuft aber nicht offline.
Beispiele:
- Original-Script (aus doku.htm, um 1 Kommentar ergänzt). Pfade und Dateinamen müssen jeweils immer angepaßt werden!
<script LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- if(parent.location.href==self.location.href) {window.location.href='../index.htm?doku/doku.htm'}//Pfad zu index.htm, dann von dieser ausgehend Pfad zur Datei und Dateiname //--> </script>- Vorteile:
- kurz
- Nachteile:
- Zusätzlich zum Pfad zur index.htm müssen auch Pfad und Dateiname der Datei gepflegt werden.
- Wurde die Datei umbenannt oder verschoben und Pfade und Dateinamen nicht angepaßt, erscheint statt der Datei nur eine leere Seite oder das Menü mit einer leeren Seite. Daher wäre es besser, vor dem Nachladen des Menüs den Benutzer zu fragen oder nur einen Link für das Nachladen anzuzeigen. Dann kann im Fehlerfalle der Benutzer sich die Seite immer noch auf herkömmlicher Weise anzeigen lassen.
- Verändertes Original-Script. Pfad und Dateiname zu index.htm muß immer angepaßt werden!
<script LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- if(parent.location.href==self.location.href) {window.location.href='../index.htm?'+self.location.href}//Pfad zu index.htm //--> </script>- Vorteile:
- es braucht nur der Pfad zu index.htm angepaßt zu werden
- Pfad und Dateiname der Datei selbst brauchen nicht mehr gepflegt zu werden
- Nachteile:
- lange Pfadanzeige in der Adreßleiste
- Wenn die Datei verschoben wurde und der Pfad zu index.htm nicht angepaßt wurde, dann erscheint nur eine leere Seite!
- Version mit Rückfrage. Pfad und Dateiname zu index.htm muß immer angepaßt werden!
<script LANGUAGE="JavaScript" TYPE="text/javascript"> <!-- if(parent.location.href==self.location.href) if(confirm('Diese Seite stammt aus einem Menü.\nJetzt versuchen, das Menü nachzuladen?\n\n(Im Fehlerfalle, oder wenn eine andere/falsche Seite erscheint,\ndrücken Sie sooft auf den "Zurück"-Knopf Ihres Browsers, \nbis diese Abfrage erscheint, und klicken auf "Abbrechen".)\n\nJetzt versuchen, das Menü nachzuladen?')) {window.location.href='../index.htm?'+self.location.href}//Pfad zu index.htm //--> </script>- Vorteile:
- es braucht nur der Pfad zu index.htm angepaßt zu werden
- Pfad und Dateiname der Datei selbst brauchen nicht mehr gepflegt zu werden
- Datei kann auch noch angezeigt werden, wenn die Datei verschoben wurde und der Pfad zu index.htm nicht angepaßt wurde. Dann muß "Abbrechen" gewählt werden. Wurde "OK" gedrückt und die Seite nicht angezeigt, so muß man auf "Zurück" drücken und dann "Abbrechen" auswählen.
- Nachteile:
- lange Pfadanzeige in der Adreßleiste
- Besucherzähler im menuFrame wird nur bei Klick auf OK erhöht
- Version mit Link. Pfad und Dateiname zu index.htm muß immer angepaßt werden!
<script LANGUAGE="JavaScript" TYPE="text/javascript"> if(parent==self){ // Pfad zu index.htm muß immer angepaßt werden! document.writeln('<CENTER><HR><a href="../index.htm?'+self.location.href+'" target="_top">') document.writeln("Diese Datei ist Teil eines Framesets. Hier klicken um den Navigationsbaum nachzuladen.</a><HR></CENTER>") } </script>- Vorteile:
- es braucht nur der Pfad zu index.htm angepaßt zu werden
- Pfad und Dateiname der Datei selbst brauchen nicht mehr gepflegt zu werden
- Datei wird auch noch angezeigt, wenn die Datei verschoben wurde und der Pfad zu index.htm nicht angepaßt wurde. Erst bei Klick auf den Link wird dann ggf. eine leere Seite angezeigt, was sich aber durch Druck auf "Zurück" wieder rückgängig machen läßt.
- Läuft online wie auch offline.
- Trotz allem relativ kurz. Es wurde gekürzt, wo immer möglich:
- HTML-Auskommentierung konnte entfallen, da kein Skritpendetag in Strings im Skript verwendet wird.
- "parent==self" statt "parent.location.href==self.location.href"
- Nachteile:
- lange Pfadanzeige in der Adreßleiste
- Bei Aufruf der Datei mit Angabe einer Textmarke wird zur Textmarke gesprungen, der Link am Textanfang verschwindet dabei meist aus der Sicht.
- Besucherzähler im menuFrame wird nur bei Klick auf den Link am Textanfang erhöht
- Version mit externem Skript. Pfad und Dateiname zum Skript muß immer angepaßt werden!
<SCRIPT language="JavaScript" src="../js/navload.js" type="text/javascript"></SCRIPT> <!-- Pfad zum Skript anpassen! -->// Inhalt der Script-Datei "navload.js": // aus: http://home.nexgo.de/ar/arne.d/ // Überarbeitung: Frank Bergermann, http://www.bitwelt.de http://www.FrankBergermann.de if (parent.location.href == self.location.href) { var verz = "http://www.xyz.de/" var img = "<IMG src='" + verz + "images/blupulse.gif' width='12' height='12' border='0'>" var spc = " " document.writeln("<CENTER><HR><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0><TR><TD>"+img+spc+"</TD><TD ALIGN='CENTER'>") document.writeln("<a href=\"javascript:window.location.href=\'"+verz+"index.htm?"+self.location.href+"\'\" target=\"_top\">") document.writeln("Diese Datei ist Teil eines Framesets. Hier klicken um den Navigationsbaum nachzuladen.</a>") document.writeln("</TD><TD>"+spc+img+"</TD></TR></TABLE><HR></CENTER>") } // Folgendes muß angepaßt werden: // - Pfad zum Hauptverzeichnis (var verz) // - Dateiname der index.htm (manchmal auch index.html) // - Grafik (var img): Pfad, Dateiname (images ...) und Attribute (width, height)- Vorteile:
- In den Dateien braucht nur der Pfad zum script angepaßt zu werden
- Datei wird auch noch angezeigt, wenn die Datei verschoben wurde und der Pfad zum Skript nicht angepaßt wurde.
- Nachteile:
- lange Pfadanzeige in der Adreßleiste
- funktioniert nur online, nicht offline
- Wurde die Datei verschoben und der Pfad zum Skript nicht angepaßt, erscheint auch kein Hinweis.
- Besucherzähler im menuFrame wird nur bei Klick auf den Link am Textanfang erhöht
- Bei Aufruf der Datei mit Angabe einer Textmarke wird zur Textmarke gesprungen, der Link am Textanfang verschwindet dabei meist aus der Sicht.
- Pfade und Dateinamen anpassen:
- "../" bedeutet: eine Verzeichnisebene höher, ggf. mehrfach anwenden, um zur index.htm oder zum Skript zu kommen.
- "\" (höchste Verzeichnisebene) vermeiden, da dies nach dem Herunterladen in ein Festplattenverzeichnis nicht mehr funktioniert
- Wenn die Datei selbst in einen neuen Ordner verschoben wird, muß der Pfad zu index.htm oder zum Skript neu angepaßt werden. Im Original-Beispiel muß auch noch der Pfad zur Datei selbst neu angepaßt werden.
- Wenn die Datei umbenannt wird, muß beim Original-Beispiel Name der Datei selbst neu angepaßt werden.
- Die 2 HTML-Kommentarzeilen (jeweils mit "--") schotten das Script von HTML ab. Dies ist Standard. Sparsame können diese weglassen, wenn das Script selbst keinen String mit dem Skript-Ende-Tag enthält (sonst mittels "\" maskieren, z. b. writeln("<\/script>")).
- Es gibt auch noch die Möglichkeit, statt location.href location.pathname zu benutzen, dann wird der übergebene String kürzer, funktioniert aber nicht mehr bei Verweisen auf andere Webspaces (z. B. wenn einem der Platz ausgeht, bleibt einem oft nichts anderes übrig, als mehrere Webspaces zu benutzen).
- Statt relativem Pfad mit "../" läßt sich auch der absolute Pfad mit "/" am Anfang benutzen. Damit erspart man sich ständige Anpassungen. Greift online auf den Domain-Anfang (z. B. www.xyz.de) zu, offline aber auf das Hauptverzeichnis des jeweiligen Festplattenlaufwerkes, wo die Seite gespeichert ist. Man könnte nun die benötigten Datein dorhin kopieren, um diese offline testen zu können. Dies sollte man aber lassen. Diese Dateien wären dann doppelt vorhanden, bei Änderungen an nur einer dieser Dateien (statt an beiden) testet man immer die falsche Datei, da der offline-Test auf das Festplatten-Hauptverzeichnis zugreift, beim Upload aber ein anderes Verzeichnis hochgeladen wird.
- Um bei Aufruf einer Datei mit Ankernamen trotzdem, daß der Link am Textanfang meist aus dem Bild verschwindet, dem Benutzer einen Hinweis zu geben, könnte man innerhalb der if-Abfrage folgenden if-Befehl setzen (am Ende der if-Abfrage, aber bisher ungetestet):
if(self.location.hash) alert("Diese Datei ist Teil eines Framesets.\nKlicken Sie den Link am Textanfang, um den Navigationsbaum nachzuladen.")- Um den Besuchszähler mitlaufen zu lassen, könnte man ihn z. B. in der Version mit externem Script mit einbinden:
- mittels document.writeln("...")
- Vorschlag: am Anfang der if-Abfrage, erscheint somit am Textanfang, noch vor dem Link, zentriert, danach Umbruch/Absatz
- Beispiel: document.writeln('<p align=center>HIER ZÄHLERLINK EINFÜGEN</p>')
- Maskierung von Strings in Strings beachten:
- Strings kann man mit "..." oder '...' angeben
- Für einen String innerhalb des Strings entweder die jeweils anderen Zeichen verwenden oder bei gleichen Zeichen Rückstrich (\) voranstellen.
- Deshalb wurde hier der äußere String mit den selteneren Hochkommas umklammert, damit im inneren die meist verwendeten Anführungszeichen ohne Maskierung verwendet werden können.
- Wenn man den Zähler unsichtbar machen will, kann man z. B. im img-Tag die Größe auf 1 Pixel setzen (<img ... width=1 height=1)
- 0 Pixel würde ich sicherheitshalber nicht versuchen (müßte man mit allen Browsern testen und überprüfen, ob der Zähler wirklich weiter läuft. Dabei Reload-Sperre beachten, also jeweils neu einwählen.).
Möglichkeit A: Umschalten auf eine andere Menüdatei.
Man erstellt einen Link auf eine 2. Menüdatei mit Ziel="_top". Bei einem Klick auf diesen Link wird diese dann in den obersten Frame geladen.
In der 2. Menüdatei sollte man als erstes direkt nach der Wurzel einen Link auf die Hauptmenüdatei (meist index.htm) setzen, wieder mit Ziel="_top". Textvorschlag: "Zurück zum Hauptmenü". (Die Wurzel schafft diese Funktionalität nicht, sie lädt nämlich nur die rechte Seite neu, mit der in der Variablen Startseite angegebenen Seite und dem in der Variablen ZielFrame angegebenen Frame als Ziel.)
//Eintrag für das normale Menü (index.htm): mD.neu(new LE("root","Menü 2 nachladen","menu2.htm","_top","","")) //Beispiel-Eintrag für das Menü 2 (menu2.htm): mD.neu(new HVE("root","<img src=\"bilder/jsmlogo.gif\" border=0 width=\"125\" height=\"16\" align=\"absmiddle\">","","Homepage von JS-Menü")) // "index.htm" ggf. an eigene Startdatei anpassen: mD.neu(new LE("root","Zurück zum Hauptmenü","index.htm","_top","","")) mD.neu(new VE("menu2","root","Menü 2","","","","")) mD.neu(new LE("menu2","Dummy","javascript:;","","","Damit Ordner nicht leer ist")) //oder (noch nicht getestet): mD.neu(new HVE("root","Untermenü 2","","")) // "index.htm" ggf. an eigene Startdatei anpassen: mD.neu(new LE("root","ZURÜCK zum Hauptmenü","index.htm","_top","","")) mD.neu(new VE("sub1","root","Unterordner","","","","")) mD.neu(new LE("menu2","Dummy","javascript:;","","","Damit Ordner nicht leer ist"))Möglichkeit B: Menüeinträge live nachladen und erweitern.
Dazu kann von mir ein kostenpflichtiges Script angefordert werden. Privatsites 5 Euro, Firmensites 50 Euro.
Bei Klick auf "Alle Ordner auf" werden diese Ordner aber bisher nicht mit geöffnet. Wird später überarbeitet werden.
Menü passend zum Link öffnen (wenn z. B. auf der rechten Seite ein Link angeklickt wird, der ebenso im Menü vorhanden ist):
WARNUNG: Dieser Abschnitt ist total unausgereift und muß noch überarbeitet werden.
- In der Version von Frank Bergermann exisitiert eine AutoSync-Funktion. Diese ist über eine Variable aus- und einschaltbar. Sie ist allerdings auf die Ereignis-Unterstützung bei Frames angewiesen ("<frame ... onLoad='...'>"). Diese bietet nur der MSIE, nicht Netscape. Inwieweit eine Umstellung auf "<frameset ... onLoad='...'>" hilft, ist noch zu prüfen. Wird wahrscheinlich auf Sekunden-Timer umgestellt werden.
- Ohne AutoSync-Funktion muß man auf JavaScript zurückgreifen. Setzt man den Aufruf in einem Link
- in href="javascript:Pfad.Funktion()", funktioniert der Link bei im Browser abgeschaltetem JavaScript garnicht mehr.
- als Ergänzung onClick="Pfad.Funktion()", muß man austesten, ob es auch mit Tastatur geht.
- Die Version von Frank Bergermann hat eine spezielle Funktion auf..., die ...
Beispiele, um im rechten Frame einen Link zu öffnen, und dabei gleichzeitig das Menü an der passenden Stelle zu öffnen:
a) in dieses Menü: HTML JavaScript Effekte Erdbeben
b) in das Standard-JS-Menü (funktioniert in diesem Menü nicht): Abschnitt: Wie funktioniert es? Abschnitt: Download
(funktioniert nur, wenn diese Seite im rechten Frame steht, und eine Version mit AutoSync verwendet wird)
(Die darin aufgerufene Funktion egalisiert Groß-/Kleinschreibung)
Ist aber überflüssig in Versionen mit (eingeschaltetem) AutoSync
Das gleiche für die Version 1.4.1:
a) in dieses Menü: HTML JavaScript Effekte Erdbeben
b) in das Standard-JS-Menü (funktioniert in diesem Menü nicht): Abschnitt: Wie funktioniert es? Abschnitt: Download
(Groß-/Kleinschreibung genauestens beachten. URL aus dem Menü empfohlen, Menüeintrag geht aber auch, aber Gefahr der Umbenennung)
Ordner geöffnet/geschlossen starten
Für das folgende gilt generell:
- Variablen Schliessen="0" und AllesZu="0" setzen, sonst geht beim 1. Klick auf einen Ordner alles wieder zu.
Version 1.41:
- nach "function aufzu" suchen lassen
- davor folgende Funktion einfügen:
function az(name,status){ var idx=1 while(mD[idx].name!=name&&mD[idx].url!=name){ idx++} mD[idx].offen=status if(status&&mD[idx].typ!="root"){ az(mD[idx].vor,1)}}- weiter siehe "Version 15beta3/4"
Version 15beta3/4:
- nach "maleMenu()" suchen lassen
- davor für jeden gewünschten Ordner einen Aufruf setzen:
az("interner Ordnername",1) // 1=auf, 0=zuVersion von Frank Bergermann:
Die folgenden Variablen benutzen. Mehrere Einträge in 1 Variable durch Komma trennen, alle Einträge in insgesamt 1 Anführungszeichenpaar.
- ordneroffenstartliste = "" //Liste von internen Ordnernamen, die beim Start geöffnet sein sollen, z. B. "software, doku", oder ""
- ordneroffenstartlistetief = "engines" //Liste von internen Ordnernamen, die beim Start geöffnet werden, incl. ihrer Unterordner, z. B. "software, doku", oder ""
oder:
- ordnerzustartliste = "" //Liste von internen Ordnernamen, die beim Start geschlossen sein sollen, z. B. "software, doku", oder ""
// Empfohlen bei Start mit ErsteOffen="1" oder AlleOffen="1"- ordnerzustartlistetief = "" //Liste von internen Ordnernamen, die beim Start geschlossen werden, incl. ihrer Unterordner, z. B. "software, doku", oder ""
// Empfohlen bei Start mit ErsteOffen="1" oder AlleOffen="1"
(Siehe FAQ von Arne Dieckmann, http://home.nexgo.de/ar/arne.d/jsmenhelp/index.html)
Vieleicht findet sich im Forum auch noch eine andere Lösung?
Siehe auch: Rechte-Maustaste-Schutz umgehen
- rechte Maustaste festhalten
- Hinweis-Box durch Druck auf Esc-Taste entfernen
- rechte Maustaste loslassen
- (getestet mit MSIE5.5 und Version mit "Hinweis"-Box)
- Funktioniert nicht bei Versionen ohne Hinweis-Box.
- höchste Farbanzahl einstellen (Wichtig!)
- Shortcut-Pfeil entfernen:
- Start Ausführen regedit OK
- hkey_classes_root\lnkfile, Eintrag IsShort oder IsShortcut umbenennen (z. B. _bak anhängen)
- Sitzung neu starten (s.u.)
- Icons anlegen:
- Ordner öffnen (weißer Hintergrund)
- Kontextmenü Neu, Verknüpfung
- Befehlszeile: Ordner oder Programm auswählen, Weiter, Fertigstellen
- Kontextmenü Eigenschaften, Anderes Symbol, *.dll/*.ico/*.bmp
- Verknüpfung markieren, Strg-C Strg-V Strg-V
- einmal unverändert, einmal Kontextmenü Eigenschaften, Allgemein, Versteckt (helles Icon)
- F5 (neuzeichnen), drittes markieren (=dunkles Icon)
- Taste "Druck", Start Programme Zubehör Paint, Einfügen
- Auswahlwerkzeug erneut anklicken, obwohl schon markiert
- Ein Icon markieren (Statuszeile muß 16x16 anzeigen)), Kopieren
- Paint ein 2. Mal starten, einfügen
- Rand mit einer unbenutzten Grundfarbe füllen, z. B. Rot
- als *.gif speichern, transparente Farbe setzen, erneut speichern
- (nur *.gif erlaubt transparenten Umriß, muß erst als *.gif gespeichert sein, dann kann man erst die transparente Farbe setzen, dann erneut speichern)
- ...
- Shortcut-Pfeil reaktivieren:
- Start Ausführen regedit OK
- hkey_classes_root\lnkfile, Eintrag IsShort oder IsShortcut Umbenennung rückgängig machen (z. B. _bak löschen)
- Sitzung neu starten (s.u.)
- Evtl. Farbanzahl-Änderung wieder Rückgängig machen
- Zum Neustart der Sitzung
- Start, Beenden, Doppelklick auf "Neu starten" (Doppelklick verhindert, daß sich das System die Auswahl merkt)
- oder Verknüpfung anlegen:
- Desktop Kontextmenü Neu Verknüpfung
- Befehlszeile=RUNDLL32.EXE shell32,SHExitWindowsEx
- Name=Schneller Windows Registry-Neustart
- Folgende Funktion einfügen:
function tageszeit(){ var h=(new Date()).getHours() if(h>=18)return "Abend" if(h>=12)return "Tag" return "Morgen" }
- prefixHTML (oder ähnliche) = "<center><font size=3 face='Times New Roman,serif'><i><b>Guten "+tageszeit()+". Herzlich willkommen!</b></i></font></center><hr>"
- oder: prefixHTML = "<center><font size=1 face='Arial,sans-serif'><i><b>Guten "+tageszeit()+". Herzlich willkommen hier bei ..., Ihrem virtuellen ...!</b></i></font></center><hr>"
- Es zählt die Uhrzeit des Anwender-Rechners, nicht des Servers.
Wird noch weiterentwickelt, aber hier schon mal eine sichere Variante.
- Das Menü-Datum wird schon beim Seitenaufbau eingefügt.
- Das Seiten-Datum (Datum der rechts angezeigten Seite) wird im IE laufend aktualisiert (Timer-Intervall). NS4 unsterstützt keinen einfachen dynamischen Textaustausch, deshalb erscheint dort nur ein Link, das Seitedatum wird dann nach Anklicken des Links per Alert ausgegeben.
- Unter der Zeile(n) mit "suffixHTML =" folgendes einfügen:
// Menüdatum und Seitedatum suffixHTML += "<CENTER><HR>"; // Zentrierung, Trennlinie (weglassen, wenn doppelt) suffixHTML += "Menü-Inhalt Stand: " + getLastModifiedDate() + "<BR>"; // Menüdatum suffixHTML += SeitedatumHTML("Rechtes Dokument: ","[Klick für rechten Dokumentstand]") + "<BR>"; // Seitedatum (s.u.) suffixHTML += "<HR></CENTER>"; // Trennlinie, Zentrierung-Aus function SeitedatumHTML(IE4Text,ErsatzText){ // HTML für Seitedatum if(document.all&&!window.opera){ //IE ab 4, Opera ausschließen, da Probleme mit document.all (Opera 5.11) setInterval("SeitedatumAktualisieren()",1000) // regelmäßig aktualisieren // oder statt Intervall als onload im menuFrame und seiteFrame (onload in einzelnen Frames nur im IE) return IE4Text + '<span id="pagedate"> </span>'; // bei Courier/Courier New weniger Leerzeichen } return '<a href="javascript:parent.alert(parent.seitedatum())">' + ErsatzText + '</a>'; // NS4:alert-Titel zeigt Framenamen an. Deshalb parent.alert } function DatumKurz(d){ // Datumsformatierung in "D.M.YYYY" aus Systemformat return d.getDate() + "." + ( d.getMonth()+1 ) + "." + Jahr( d.getYear() ) } function Jahr(x){ // Jahr 4stellig mit Browserkorrektur //MSIE: 2001. NS: 101 (bei new Date, =-1900), 01 (bei document.lastModified, = 2stellig). //Opera + Übersicht: http://www.bitwelt.de/javascript/sonstiges/jahr2000.htm return x>999?x:x<70?x+2000:x+1900 } function getLastModifiedDate() { // Datum der letzten Dokumentänderung, Form: "D.M.YYYY" return DatumKurz( new Date( Date.parse(document.lastModified) ) ); } // Dank an www.pessara.de function seitedatum(){ // für Seite-Datum im Menü var d // Datum // Wichtig: Existenz der Objekte abfragen (beim Start noch nicht geladen, CGI-Ergebnisse sind ohne lastModified, ...) if(frames[ZielFrame]) // erst nach dem Start if(frames[ZielFrame].document) // Dokument geladen if(d=frames[ZielFrame].document.lastModified) // nur bei gespeicherten Dateien, nicht bei generierten Seiten return DatumKurz(new Date(d)) return "(-)" // else } function SeitedatumAktualisieren(){ // Seitedatum aktualisieren. Wichtig: Existenz der Objekte abfragen! if(frames["menuFrame"]) if(frames["menuFrame"].document) if(frames["menuFrame"].document.all) if(frames["menuFrame"].document.all.pagedate) frames["menuFrame"].document.all.pagedate.innerText=seitedatum() }
Variable Breite des Menüframes
Im MSIE kann man den Menüframe mit der Maus breiter und schmäler ziehen, wenn man den Framespacing-Wert für den Menü-Frame ändert:
- nach framespacing= suchen lassen
- den Wert auf 2 setzen
- Kommt 3x vor, beim 2. mal (beim KlapFrame) kann man den alten Wert lassen, beim 3. Mal (menuFrame für abgeschaltetes Scripting) wieder auf 2 ändern.
- Dann erscheint eine weiße Linie (Hintergrundfarbe sollte dann nicht weiß sein), und an der ändert sich der Mauspfeil zum Ziehen.
Version 1.41 (auf www.js-menue.de)
Unendliche Ordnertiefen ermöglichen (in 15betaX behoben)
- nach "ion aufzu" suchen lassen
- die gesamte Funktion aufzu löschen und durch folgende 2 Funktionen ersetzen:
function aufzu(name,status){ var idx=1 while(mD[idx].name!=name&&mD[idx].url!=name){ idx++} if(mD[idx].url!=""&&(status|VerzZuLink)){ frames[ZielFrame].location.href=mD[idx].url} if((AllesZu&status)||(Schliessen==1&&mD[idx].vor==mD[1].name)){ for(idx=2;idx<mD.laenge;idx++){ mD[idx].offen=false}} az(name,status) maleMenu()} function az(name,status){ var idx=1 while(mD[idx].name!=name&&mD[idx].url!=name){ idx++} mD[idx].offen=status if(status&&mD[idx].typ!="root"){ az(mD[idx].vor,1)}}
Script in werbefinanzierter Umgebung zum Laufen bringen (in 15betaX behoben)
- im Folgenden unbedingt die Anführungszeichen mit markieren!
- "<HTML>\n<HE" durch "<HT"+"ML>\n<HE" ersetzen lassen
- "</HEAD>\n<BODY " durch "</HE"+"AD>\n<BO"+"DY " ersetzen lassen
- </BODY>\n</HTML> durch </BO"+"DY>\n</HT"+"ML> ersetzen lassen
Script in einem Frameset zum Laufen bringen (in 15betaX behoben)
- Wenn die index.htm selbst Teil eines Framesets werden soll (z. B. bei Umleitung per Frame, eigenes Frame-Set, oder Auflistung durch Suchmaschine im Frameset, oder Intranet-Verweis im Frameset)
- Ursache: Das Frameset B (für abgeschaltetes Scripting) kollidiert mit Frameset A (dynamisch erstellt bei eingeschaltetem Scripting)
- Abhilfe: Frameset B innerhalb <noscript>...</noscript> setzen:
- nach "ion B" suchen lassen
- an's Zeilenende springen und Leerzeile einfügen
- darin "<NOSCRIPT>" eingeben (ohne Anführungszeichen)
- hinter "</FRAMESET>" eine Leerzeile einfügen
- darin "</NOSCRIPT>" eingeben (ohne Anführungszeichen)
- speichern
- es geht auch anders:
- abfragen, ob das Script in einem Frameset steht, und dann dieses "sprengen", d. h. den obersten Frame durch sich selbst ersetzen (ungetestet): if(self!=top)top.location.href=self.location.href
- oder: laut Forum gab es auch die Möglichkeit, irgendetwas bestimmtes umzubenennen (ich weiß gerade nicht mehr was, kann z. B. in Frameset-Definition B von "menuFrame" in "xmenuFrame" sein)
CSS Style-Sheet im Klappframe verwenden (in 15betaX behoben)
Leider ist in Version 1.41 ein Tippfehler, darum wird im Klapp-Frame das Style-Sheet nicht geladen. Abhilfe:
Suchen lassen nach:
TYPE\
ersetzen durch:
TYPE=\In 15betaX wird der betroffene Quellcode-Teil (bentutzt für Menü-Frame und Klapp-Frame) in einer gemeinsamen Variable gespeichert, und die ist richtig.
Neue Version 15beta3 zum Download freigegeben
Es hat leider sehr lange gedauert, aber nun hat Ansgar endlich die Erlaubnis erteilt. Neue Version downloadbar unter:
http://js-menue.info/jsm15b3.zip (Quelle: JS-Menü-Newsletter)
Integriert sind z. B. folgende Verbesserungen (Erläuterung der Punkte oben):
- Script läuft nun auch innerhalb eines Framesets (z. B. bei einer Umleitung mittels Frame, oder innerhalb eigener Frames)
- unendliche Ordnertiefen ermöglicht
- Script läuft nun besser in werbefinanzierter Umgebung (bestimmte HTML-Schlüsselworte, bei denen der Provider zusätzlichen Code einfügt, wurden aufgetrennt)
- Style-Sheet im Klapp-Frame läuft nun korrekt (wegen eines Tippfehlers bisher garnicht)
Wie umsteigen?
- bisherige Menüeinträge in die neue index.htm hineinkopieren, dortige Standard-Menüeinträge löschen
- Variablen vergleichen und abändern, auf die Werte Ihres bisherigen Menüs setzen
Version 1.41 als auch 15beta3/4 (Version 15beta3 hier)
Opera stoppt, wenn es die Seiten dynamisch aufbauen soll. Stattdessen kann man in Opera das statische Menü "nojsmenu.htm" anzeigen lassen.
Hinter:
// ab hier brauchst Du nichts mehr zu ändernfolgendes einfügen:
if(navigator.userAgent.indexOf("Opera")!=-1){ brow="opera" // Standard: browserabhängie Links = Opera . WICHTIG: Abfrage muß nach Netscape4.x und MSIE erfolgen jsstart=' '; menusource='nojsmenu.htm'; KlapFrame='0'; }else{ jsstart=' onLoad="start()" onResize="neumalen()" '; menusource='leer.htm'; }Suchen lassen nach:
onLoad="start()" onResize="neumalen()"
ersetzen durch:
'+jsstart+'Suchen lassen nach:
FRAME NAME="menuFrame" SRC="leer.htm"
ersetzen durch
FRAME NAME="menuFrame" SRC="'+menusource+'"Die neueste Opera-Version (6 ab build 1010, nicht die 6 beta's) soll das nicht mehr nötig haben. Bin aber noch nicht dazu gekommen.
Scrollbalken unter NS6.01 anzeigen lassen
Habe ich schon mal versucht (nojsmenu.htm vorher geladen und anderes). Die Scrollbalken wurden dann auch angezeigt, waren aber tot, es ließ sich nicht damit scrollen.
Stattdessen hilft folgender Code, einen kleinen Hinweis am Menüanfang auszugeben:
Hinter
// ab hier brauchst Du nichts mehr zu ändernfolgendes setzen:
if(navigator.userAgent.indexOf("Netscape6")!=-1)
prefixHTML="<small>Netscape 6 Scrollbar-Fehler möglich. Scrollrad benutzen oder Menü-Frame anklicken und Tastaturpfeiltasten benutzen!</small><HR>"+prefixHTML
Menüaufbau beschleunigen (besonders bei Seiten mit Bannern/Grafiken/Countern). Geändert!
- Bisher beginnt der Menüaufbau erst, nachdem das Frameset vollständig geladen ist (leer.htm in menuFrame und Startseite in seiteFrame).
- Dies kann, besonders bei Seiten mit Bannern/Grafiken/Countern, lange dauern.
- Ursache: Laut SelfHTML > JavaScript > Sprachelemente > onLoad kennt Netscape den onLoad-Zusatz nur in 2 Tags: <frameset> und <body>. Bisher wird die Funktion start() mittels onLoad="..." im frameset-Tag aufgerufen.
- Abhilfe: start() im body-Tag der Datei im menuFrame
- nach "ion start" suchen lassen
- die Zeile:
function start(){
durch folgende Zeilen ersetzen:
a) alte Lösung (Reagiert nicht auf Reload, z. B. MSIE F5, NS Strg-R):
function start(){} // Dummy, um Framesets weiterzuverwenden
function start2(){ // für startladen.htm
b) neue Lösung (Reagiert auch auf Reload)
started=false
function start(){ // Dummy, um Framesets weiterzuverwenden
if(!started) // nötig für nach Reload (MSIE: F5-Taste).
start2()
}
function start2(){ // für startladen.htm- nach "ion b" suchen lassen
- In der Zeile
document.write('<FRAME NAME="menuFrame" SRC="leer.htm" MARGINWIDTH="0" MARGINHEIGHT="0" SCROLLING="Auto">')
leer.htm durch startladen.htm ersetzen- Datei startladen.htm erstellen mit folgendem Inhalt:
<HTML> <BODY BGCOLOR='#FFFFCC' onLoad="parent.start2()"> <TABLE WIDTH=100% HEIGHT=100%> <TR> <TD align=center valign=middle><I><B>Menü wird geladen ...</B></I></TD> </TR> </TABLE> </BODY> </HTML>Wichtig ist der Zusatz onLoad="parent.start2()" im body-Tag
nach "ion aufzu" suchen lassen
dann nach "malemenu"
Diese Zeile komplett ersetzen durch:
fmw=frames["menuFrame"].window
if (document.layers){ // Nur Netscape
x=fmw.pageXOffset
y=fmw.pageYOffset
}
else{ // IE
x=fmw.document.body.scrollLeft
y=fmw.document.body.scrollTop
}
maleMenu()
fmw.scrollTo(x,y) // x-Position funktioniert nicht (NN4/IE), geht immer auf hor. Anfang(0). Y klappt.
Menüstruktur-Definitionen vereinfachen
Bei Versionen 1.41 und 15beta3/4: vor "function ladeDaten()" oder sonst wo zwischen/nach den Funktionen folgende Funktionen einfügen:
// Im Folgenden 1 Zusatzleerzeichen nach new gegen maschinelle Ersetzung function l(a,b,c,d,e,f){ // Link mD.neu(new LE(a,b,c,d,e,f)) } function v(a,b,c,d,e,f,g){ // Verzeichnis mD.neu(new VE(a,b,c,d,e,f,g)) } function r(a,b,c,d){ // Root mD.neu(new HVE(a,b,c,d)) }Statt z. B. mD.neu(new LE(...)) heißt es dann nur noch l(...).
Achtung: hinten die letzte Klammer fällt auch weg.Tool zum kürzen alter Menüeinträge: menueintragskuerzer.htm. Kann auch rückgängig machen (Modus "rückwärts" wählen).
Sonst hier die Anleitung für Wordpad:
- index-Datei | Kontextmenü | Senden An | Wordpad
- Menü "Bearbeiten | Ersetzen" benutzen:
- Ohne Anführungszeichen eingeben
- Nach Eingabe Klick auf "Alles Ersetzen"
- "mD.neu(new LE" durch "l"
- "mD.neu(new VE" durch "v"
- "mD.neu(new HVE" durch "r"
- Unter die Menüstrukturdefinitionen zwei Zeilen mit ganz vielen ")" setzen: )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
- Menü "Bearbeiten | Ersetzen" benutzen:
- "))" durch ")"
- ohne Anführungszeichen
- Klick auf "Ersetzen"
- Danach solange Enter-Taste (unten rechts) so lange festhalten, bis der Cursor in der Zeile mit den vielen Klammern steht. Dann sofort stoppen. Keinesfalls darf im anschließenden Code geändert werden!
- Sollte der Cursor darüber hinaus geschossen sein; Klick auf Schließ-Symbol, Speichern=Nein, von vorne beginnen.
- Die 2 Zeilen mit den vielen Klammern löschen.
- Statt Links auf die einzelnen Dateien eines Ordners wird nur 1 Link auf den Ordner selbst gesetzt. Für die Anzeige der Dateien dieses Ordners ist dann der Server zuständig. Lokal erscheint dann die Windows-Ordneranzeige, auf dem Server erscheint eine Liste der Dateinamen zum Anklicken (vorausgesetzt es gibt in dem Ordner keine Startdatei und auf dem Server ist die Anzeige der Ordnerinhalte nicht gesperrt).
- Ordner dürfen keine Startdateien enthalten (index/home/homepage/start.htm/html, server-abhängig)
- Beim Server darf die Anzeige der Ordnerinhalte nicht gesperrt sein. Z. B. ist dies aber bei puretec.de seit neuestem der Fall. Zum Freigeben muß eine .htaccess-Datei erstellt werden:
- auf PC neue Textdatei anlegen, Inhalt: Options +Indexes
- x.htaccess nennen, da .htaccess nicht geht (Windows bemängelt den fehlenden Dateinamen)
- Datei per Dosbox (cd ......, ren x.htaccess .htaccess) oder Windows-Commander in .htaccess umbenennen
- auf den Server übertragen
- in den obersten Ordner oder nur in bestimmte Unterordner (ist aber immer auch für alle tiefergehenden Ordner gültig)
- ob die oben genannte Option nur bei puretec.de so heißt oder allgemeingültig ist, weiß ich nicht. Einfach ausprobieren.
- Linkeinträge mit URL-Angabe
- Aktueller Ordner: URL="" oder besser "." oder "./")
- Unterordner: URL="ordnername", z. B. URL="doku" oder besser "./doku" (Wegen Verwechslungsgefahr mit internen Ordnernamen)
- Übergeordneter Ordner: URL="../"
- Oberster Ordner: URL="/". Vermeiden, da online=www.xyz.de, offline=Festplattenlaufwerks-Wurzel, z. B. "C:\"
- Verzeichniseinträge mit URL-Angabe
- in einem Verzeichnis-Eintrag des Menüs hat URL="" keine Wirkung, da das Menüscript bei leerer Verzeichnis-URL keinen Link setzt, stattdessen URL="." benutzen.
- Unterordner: URL="ordnername", z. B. URL="doku" führt zu Verwechslung mit Ordner-Namen (bei Klick auf Menüordner mit Name="doku" öffnet sich stattdessen der Menüordner mit URL="doku", immer der, welcher zuerst definiert wurde). Daher URL="./doku" verwenden.
- Übergeordneter Ordner: URL="../"
- Oberster Ordner: URL="/". Vermeiden, da online=www.xyz.de, offline=Festplattenlaufwerks-Wurzel, z. B. "C:\"
- Festplatten-Ordner, Beispiel: URL="file:///D:/windows.95/desktop". Beachte:
- Schrägstrich (/) statt Rückstrich (\) verwenden
- Vorsatz "file:///"
- 3 Schrägstriche statt 2 (wie bei http://)
- Vermeiden, läuft nicht online, stattdessen relative Pfadangaben verwenden. Höchstens sinnvoll, um in einem Intranet lokale Anwendungen starten zu können.
Funktionslose Menüeinträge erzeugen
- Ordner: URL="". Das Menüscript setzt bei Ordnereinträgen mit leerer URL keinen Link.
- Links: Das Menüscript setzt bei Linkeinträgen mit leerer URL auch einen leeren Link, dies führt dann zur Anzeige des aktuellen Ordners. Um dies zu verhindern, URL wie folgt benutzten: URL="#" (Anker ohne Ankername), oder URL="javascript:", URL="javascript:;", URL="javascript://", URL="javascript://Kommentarhinweis", z. B. URL="javascript: // Dies ist eine Leerzeile ". Es geht auch URL="javascript:void(0)". Wichtig:"(0)" (Zahl in Klammern), Klammern nicht leer lassen, sonst erscheint im IE in der Statusanzeige ein gelbes Warndreieck mit Ausrufezeichen, weil der void-Parameter fehlt, und beim Doppelklick auf das Warndreieck eine ausführlichere Fehlermeldung, die aber auf Zeile 1 zeigt (innerhalb der URL stimmt Zeile 1 ja wieder).
- Link ohne Strukturgrafik davor (z. B. für Leerzeilen, dann URL wie oben verwenden):
- Version 1.41 und 15betaX: ICON="leer.gif"
- Version von Frank Bergermann: ICON="leer2.gif". Wird automatisch durch leer.gif ersetzt. Nötig, da sonst der Link als Bestandteil mehrzeiliger Links aufgefaßt wird und mit diesem zusammen dargestellt wird.