Warum läuft mein Skript nicht im Frame?
Hagen
- javascript
0 Urmel0 Christoph Schnauß0 Reiner0 hagen
0 Urmel
Hallo,
ich kenne mich mit Javascript nicht sonderlich aus, wollte aber ein vorgefertigtes Skript für ein Navigationsmenu auf meine Seite einbauen. Sobald ich jedoch einen auf Frames basierenden Rahmen verwende, bekomme ich bei folgendem (ansonsten lauffähigen) Skript eine "Error: Object expected" in Zeile 0.
Hier der komplette Code der Seite, so wie NetObjects sie generiert hat (im lauffähigen Zustand, d.h. ohne Frames). Muß vielleicht irgendwas an eine andere Stelle, wenn ich Frames verwende?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <META NAME="Generator" CONTENT="NetObjects Fusion 5.0.2 für Windows"> <TITLE>Home</TITLE> <script> <!-- Beginning of JavaScript -
// CREDITS: // new hierarchical menu Version 1.1 by Urs Dudli and Peter Gehrig // Copyright (c) 1999 Peter Gehrig and Urs Dudli. All rights reserved. // Permission given to use the script provided that this notice remains as is. // Additional scripts can be found at http://www.24fun.ch. // info@24fun.ch // 1/18/2000
// IMPORTANT: // If you add this script to a script-library or script-archive // you have to add a link to http://www.24fun.ch on the webpage // where this script Script will be running.
// **********************************************************************************
// INSTRUCTIONS: // Configure the menu and font parameters for each menublock below. // each menublock[x] contains all necessary informations to build one menu-item with // as many sublinks as you like. You can add as many menublocks as you need. // // ATTENTION: When you configure the menublocks take care that you // set the ";" and the "+" as seen below.
// **********************************************************************************
var menublock=new Array() // no need to change this var plus_i=0 // no need to change this
menublock[0]="Arial;"+ // font mainlink "4;"+ // fontsize mainlink "000000;"+ // fontcolor mainlink "1;"+ // fontweight mainlink, 1 means bold, 0 means normal "Verdana;"+ // font sublinks "3;"+ // fontsize sublinks "FFFFFF;"+ // fontcolor sublinks "0;"+ // fontweight sublinks, 1 means bold, 0 means normal "menublock 1|#|;"+ // text|URL|target of mainlink "submenu 1.1|submenu11.html|main;"+ // text|URL|target of first sublink "submenu 1.2|submenu12.html|main;" // text|URL|target of second sublink
menublock[1]="Arial;"+ // font mainlink "4;"+ // fontsize mainlink "000000;"+ // fontcolor mainlink "1;"+ // fontweight mainlink, 1 means bold, 0 means normal "Verdana;"+ // font sublinks "3;"+ // fontsize sublinks "FFFFFF;"+ // fontcolor sublinks "0;"+ // fontweight sublinks, 1 means bold, 0 means normal "menublock 2|#|;"+ // text and URL of first mainlink "submenu 2.1|submenu21.html|main;"+ // text|URL|target of mainlink "submenu 2.2|submenu22.html|main;"+ // text|URL|target of first sublink "submenu 2.3|submenu23.html|main;"+ // text|URL|target of second sublink "submenu 2.4|submenu24.html|main;"+ // text|URL|target of thirth sublink "submenu 2.5|submenu25.html|main;" // text|URL|target of fourth sublink
// The following block is different. It contains a mainlink without submenus. // Take care to set the ";;;;" exactly as seen below. menublock[2]="Arial;"+ // font mainlink "4;"+ // fontsize mainlink "000000;"+ // fontcolor mainlink "1;"+ // fontweight mainlink, 1 means bold, 0 means normal ";;;;"+ // leave it empty "no submenu|main.html|main;" // text and URL of mainlink
menublock[3]="Arial;"+ // font mainlink "4;"+ // fontsize mainlink "000000;"+ // fontcolor mainlink "1;"+ // fontweight mainlink, 1 means bold, 0 means normal "Verdana;"+ // font sublinks "3;"+ // fontsize sublinks "FFFFFF;"+ // fontcolor sublinks "0;"+ // fontweight sublinks, 1 means bold, 0 means normal "menublock 3|#|;"+ // text and URL of mainlink "submenu 3.1|submenu31.html|main;"+ // text and URL of first sublink "submenu 3.2|submenu32.html|main;"+ // text and URL of second sublink "submenu 3.3|submenu33.html|main;" // text and URL of thirth sublink
// No need to change anything below // **********************************************************************************
var menusplit var urlsplit var font_weight_main var font_weight_sub var font_weight_sub
var minusimg=new Image() minusimg.src="minus131.gif"
var plusimg=new Image() plusimg.src="plus131.gif"
var showsubmenus=new Array() for (i=0;i<=menublock.length-1;i++) { showsubmenus[i]=-1 }
var plusminusimg=new Array() for (i=0;i<=menublock.length-1;i++) { plusminusimg[i]=plusimg.src }
function openandclose(visi) { showsubmenus[visi]=(-1)*showsubmenus[visi] var menucontent="" if (showsubmenus[visi]==1) {plusminusimg[visi]=minusimg.src} if (showsubmenus[visi]==-1) {plusminusimg[visi]=plusimg.src} menucontent+="<table border=0>" for (i=0;i<=menublock.length-1;i++) { menusplit=menublock[i].split(";") urlsplit=menusplit[8].split("|") if (menusplit[3]==1) {font_weight_main="<b>"} if (menusplit[3]==0) {font_weight_main=""} if (menusplit[7]==1) {font_weight_sub="<b>"} if (menusplit[7]==0) {font_weight_sub=""} menucontent+="<tr><td>"
if (menusplit[9].length==0) { menucontent+="</td>" menucontent+="<td>" menucontent+=font_weight_main menucontent+="<a href="+urlsplit[1]+" target="+urlsplit[2]+">" menucontent+="<font face="+menusplit[0]+" color="+menusplit[2]+" size="+menusplit[1]+">" menucontent+=urlsplit[0] menucontent+="</font></a></td></tr>" plus_i++ }
if (menusplit[9].length!=0) { var thismainmenu=i+plus_i menucontent+="<a href='javascript:openandclose("+i+")'>" menucontent+="<img src='"+plusminusimg[i]+"' border=0></a></td>" menucontent+="<td>" menucontent+=font_weight_main menucontent+="<a href='javascript:openandclose("+i+")'>" menucontent+="<font face="+menusplit[0]+" color="+menusplit[2]+" size="+menusplit[1]+">" menucontent+=urlsplit[0] menucontent+="</font></a></td></tr>"
if (showsubmenus[i]==1) { for (ii=9;ii<=menusplit.length-1;ii++) { urlsplit=menusplit[ii].split("|") menucontent+="<tr><td></td><td>" menucontent+=font_weight_sub menucontent+="<a href="+urlsplit[1]+" target="+urlsplit[2]+">" menucontent+="<font face="+menusplit[4]+" color="+menusplit[6]+" size="+menusplit[5]+">" menucontent+=urlsplit[0] menucontent+="</font></a></td></tr>" } } } } menucontent+="</table>" if (document.all) { menu.innerHTML=menucontent } if (document.layers) { document.menu.document.write(menucontent) document.menu.document.close() } }
// - End of JavaScript - --> </script>
</HEAD> <BODY BGCOLOR="#FF9933" TEXT="#000000" onLoad="openandclose(1000)" TOPMARGIN=0 LEFTMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0> <div id="menu" style="position:absolute;top:20px;left:10px"></div> </BODY> </HTML>
Vorab schonmal vielen Dank (und eine Bitte um Entschuldigung, falls dies eine ausgesprochen dumme Frage sein sollte)!
bitte genauer schildern, wo dein problem liegt.
Am besten den fehlerhaften quellcode ebenfalls posten.
hi Urmel,
bitte genauer schildern, wo dein problem liegt.
Auch Fragen stellen ist eine Sache, die man erst lernen muß.
Am besten den fehlerhaften quellcode ebenfalls posten.
Das hat er doch getan. Es gibt 180 Zeilen fehlerhaften Code, reicht dir das nicht ;-)
Grüße aus Berlin
Christoph S.
bitte genauer schildern, wo dein problem liegt.
Auch Fragen stellen ist eine Sache, die man erst lernen muß.
Mein gott (redensart) hier muss man aber wirklich aufpassen was man sagt um nicht gleich ins nächste zynikerloch zu fallen *Gg*
Am besten den fehlerhaften quellcode ebenfalls posten.
Das hat er doch getan. Es gibt 180 Zeilen fehlerhaften Code, reicht dir das nicht ;-)
Und sakastisch obendrein ;-).
Hier ist aber einer ganz schön weit gesunken, in welche richtung auch immer *gg*
am besten ich sage garnix mehr in diesem forum(board, was auch immer).
hallo Hagen,
ich kenne mich mit Javascript nicht sonderlich aus
Naja, das kommt ja vielleicht noch.
Sobald ich jedoch einen auf Frames basierenden Rahmen verwende
Was ist ein "auf Frames basierender Rahmen"? Frames sind selbst "Rahmen", du versuchst irgendwie, einen weißen Schimmel weiß zu färben.
bekomme ich bei folgendem (ansonsten lauffähigen) Skript eine "Error: Object expected" in Zeile 0.
Hm, das liegt eben am "vorgefertigten" Script, das mit deinem Frameset wohl nix anfangen kann.
Hier der komplette Code der Seite
Ist mir ein bissel zu "komplett", andrerseits fehlt jeglicher Hinweis auf ein Frame oder Frameset. Es wäre besser, tatsächlich die Codeteile rauszuschnipseln, die problematisch sind. Sowohl der IE wie auch Netsape/mozilla haben mit "Javascriptkonsolen" ganz zuverlässige Anzeigeinstrumente, an welcher Stelle es denn klemmt.
so wie NetObjects sie generiert hat
Das ist wahrscheilnich dein entscheidender Fehler. Man sollte sich grundsätzlich _niemals_ Javscriptcode von einem Programm zusammenschustern lassen, egal, ob NetObjects oder Dreamweaver oder GoLive.
Und zum Informationsgehalt einer Nachfrage darf ich anmerken:
sowas wie
<script>
<!-- Beginning of JavaScript -// CREDITS:
// new hierarchical menu Version 1.1 by Urs Dudli and Peter Gehrig
// Copyright (c) 1999 Peter Gehrig and Urs Dudli. All rights reserved.
// Permission given to use the script provided that this notice remains as is.
// Additional scripts can be found at http://www.24fun.ch.
// info@24fun.ch
// 1/18/2000// IMPORTANT:
// If you add this script to a script-library or script-archive
// you have to add a link to http://www.24fun.ch on the webpage
// where this script Script will be running.
ist zum Beispiel einfach nur eine Belastung des Forums, das hat absolut keinen Diskussionswert und sollte _niemals_ gepostet werden.
Aber _hier_ gibts das erste entscheidende Problem in deinem Code (ziemlich weit unten):
if (document.all) {
menu.innerHTML=menucontent
}
if (document.layers) {
document.menu.document.write(menucontent)
document.menu.document.close()
}
Hier wird einfach nur nach IE4 und Netscape 4 unterschieden. Das war mal eine Zeitlang ganz nützlich, bringt aber heute so gut wie nur noch Verwirrung, weil die Zeit der 4er-Versionen der Browser doch endgültig vorbei ist. Nur weiß das deine Software NetObjects natürlich nicht.
// - End of JavaScript - -->
</script>
Ja, und nun? Der gesamte von dir gepostete Scriptbereich hat nicht einen einzigen Hinweis darauf, daß etwas in einem Frame passieren soll. Dieser Script-Code _kann_ in unveränderter Form keine Framekonstruktion ansprechen.
Aber selbstverständlich kann Javascript in Framekonstruktionen eingesetzt werden. Das geht beispielsweise mit Befehlen wie
top.main.location.href = "seite.htm";
Aber wie dein Frameset aussieht und von wo aus du nun deinen Scriptcode mit welchem Ziel einsetzen willst, hast du leider nicht angegeben.
Grüße aus Berlin
Christoph S.
so wie NetObjects sie generiert hat
Das ist wahrscheilnich dein entscheidender Fehler. Man sollte sich grundsätzlich _niemals_ Javscriptcode von einem Programm zusammenschustern lassen, egal, ob NetObjects oder Dreamweaver oder GoLive.
Das Skript ist nicht "von einem Programm zusammengeschustert", sondern stammt aus einer Skript-Datenbank im Netz. Ich habe lediglich versucht, es über die "HTML einfügen"-Funktion von Netobjects in den Seitencode einzubinden, da die Seite, für die das Menu gedacht ist, nun mal auf Netobjects angelegt wurde.
Das Skript funktionierte auch - und zwar sowohl mit Netscape als auch mit IE - aber nur so lange, wie aus Netobjects generierte Seite keine Frames verwendete.
Hier wird einfach nur nach IE4 und Netscape 4 unterschieden. Das war mal eine Zeitlang ganz nützlich, bringt aber heute so gut wie nur noch Verwirrung, weil die Zeit der 4er-Versionen der Browser doch endgültig vorbei ist. Nur weiß das deine Software NetObjects natürlich nicht.
Nein, _ich_ weiß das nicht, da ich, wie ich in meinem Posting betont habe, mich mit javascript nicht auskenne. Das hindert mich aber nicht daran, zumindest den Versuch zu unternehmen, das Skript einzubinden.
dein Frameset aussieht und von wo aus du nun deinen Scriptcode mit welchem Ziel einsetzen willst, hast du leider nicht angegeben.
Ich hatte den Skript-Kode direkt in das gewünschte Frame eingefügt (im Body-Tag und im Body selbst) und am Frameset habe ich keine Veränderungen vorgenommen. Die anderen Frames sind von dem Skript ja eigentlich auch nicht betroffen, oder? Wenn ich das Frame direkt öffne, dann funktioniert das Skript auch, nur eben nicht bei einem Aufruf über die HTML-Datei mit dem Frameset....
Funktioniert evtl. der Event-Handler "onload" bei einem Frameset nicht im Body-Tag eines Frames und muß ins "frameset"-Tag gesetzt werden? Aus der Beschreibung der JavaScript-Sprachelemente geht das nämlich leider nicht klar hervor.
hallo Hagen,
Das Skript ist nicht "von einem Programm zusammengeschustert", sondern stammt aus einer Skript-Datenbank im Netz.
Das ist leider in vielen Fällen dasselbe.
Ich habe lediglich versucht, es über die "HTML einfügen"-Funktion von Netobjects in den Seitencode einzubinden, da die Seite, für die das Menu gedacht ist, nun mal auf Netobjects angelegt wurde.
Man sollte sich auf komplexere "Editoren" erst dann verlassen, wenn man genau weiß, was sie machen und das Ergebnis notfalls von Hand korrigieren kann.
Das Skript funktionierte auch - und zwar sowohl mit Netscape als auch mit IE - aber nur so lange, wie aus Netobjects generierte Seite keine Frames verwendete.
Das habe ich bereits begründet. Natürlich "funktioniert" es - aber auf völlig veralteter Basis. Es würde übrigens auch in einer Seite funktionieren, die nicht mit NetObjects gebaut wurde.
Nein, _ich_ weiß das nicht, da ich, wie ich in meinem Posting betont habe, mich mit javascript nicht auskenne. Das hindert mich aber nicht daran, zumindest den Versuch zu unternehmen, das Skript einzubinden.
Ich will dich auch nicht daran hindern, nur siehst du ja selbst, wohin dich dieser Versuch geführt hat.
Ich hatte den Skript-Kode direkt in das gewünschte Frame eingefügt (im Body-Tag und im Body selbst)
Also nicht in den Rahmen, sondern in die Seite, die in den Rahmen geladen werden soll. Und warum sowohl in den Header wie auch in den Body? So wie dein Script aussieht, gehört es in den Headerbereich.
und am Frameset habe ich keine Veränderungen vorgenommen.
Ja, aber warum gibts du dein Frameset nicht an? Was ist daran so Geheimnisvolles?
Die anderen Frames sind von dem Skript ja eigentlich auch nicht betroffen, oder?
Bisher nicht. Nur soll dein Script ja offensichtlich für eine Art von Menüführung sorgen, und seine Ergebnisse sollen wahrscheinlich in einem anderen Frame erscheinen als dem, in dem die Seite liegt, die dieses Script enthält. Solange du dein Frameset nicht preisgibst, ist das jedoch platterdings eine Vermutung.
Wenn ich das Frame direkt öffne, dann funktioniert das Skript auch, nur eben nicht bei einem Aufruf über die HTML-Datei mit dem Frameset....
Kann es nicht, wie jetzt mehrfach betont.
Funktioniert evtl. der Event-Handler "onload" bei einem Frameset nicht im Body-Tag eines Frames
Der EventHandler "onload" ist für Framefragen völlig irrelevant, wie alle EventHandler. Er gilt der Seite, in der er steckt. Ob diese Seite ihrerseits nun auch noch in einem Frame steckt, ist vollkommen bedeutungslos.
und muß ins "frameset"-Tag gesetzt werden?
Muß nicht, da gibts aber Besonderheiten. Auch Frames _können_ über EventHandler bestimmte Aufgaben zugewiesen werden, und "onload" gehört dazu.
Aus der Beschreibung der JavaScript-Sprachelemente geht das nämlich leider nicht klar hervor.
Welche "Beschreibung" meinst du denn? In SELFHTML ist das ziemlich gut dargelegt.
Grüße aus Berlin
Christoph S.
Hi,
ich kenne mich mit Javascript nicht sonderlich aus, wollte aber ein vorgefertigtes Skript für ein Navigationsmenu auf meine Seite einbauen. Sobald ich jedoch einen auf Frames basierenden Rahmen verwende, bekomme ich bei folgendem (ansonsten lauffähigen) Skript eine "Error: Object expected" in Zeile 0.
[...]
</BODY>
</HTML>Vorab schonmal vielen Dank (und eine Bitte um Entschuldigung, falls dies eine ausgesprochen dumme Frage sein sollte)!
ich bin eigentlich immer dafür, daß man nicht zu hart mit der Form einer fragen verfahren sollte und jedesmal unnötig auf die FAQs verweisen muß! Aber Deine Frage finde ich schon sehr dreist!!!
Das kommt mir so vor, als wenn Du irgendwo etwas zusammen"geklaut" hast, was Deinen Belangen aber jetzt nicht genügt. Da Du keine Ahnung hast und, was noch schlimmer ist, Dir keine Mühe gibst, das Problem selbst mal _etwas_ zu umkreisen, postest Du das ganze Gerät einfach hier rein, in der Hoffnung, jemand spielt Mr. Debugger und postet das ganze zurück?
Nee, ich bin immer dafür, daß so gut es geht geholfen wird, weil ich manchmal auch vor größeren Problemen stehe, die ich lösen will/muß, aber das geht doch etwas zu weit, oder?
Gruß
Reiner
Hallo Reiner,
Das kommt mir so vor, als wenn Du irgendwo etwas zusammen"geklaut" hast, was Deinen Belangen aber jetzt nicht genügt.
Wie jeder, der der englischen Sprache mächtig ist, dem Skript entnehmen kann, ist der Code mitnichten "geklaut", sondern frei verwendbar, solange die Autorschaftsnotiz beibehalten wird. Justamente dies ist der Grund, warum ich diese gänzlich überflüssigen Informationen mitgepostet habe - ein gar schändlicher und frevelhafter Akt der Bandbreitenverschwendung, wie ich jetzt zu meiner tiefsten Bestürzung erkennen muß!!
Da Du keine Ahnung hast und, was noch schlimmer ist, Dir keine Mühe gibst, das Problem selbst mal _etwas_ zu umkreisen, postest Du das ganze Gerät einfach hier rein, in der Hoffnung, jemand spielt Mr. Debugger und postet das ganze zurück?
Nein, ich hatte lediglich die vage Hoffnung, dass hier eventuell zwischen den arroganten Sarkasmen auch jemand einen konstruktiven Hinweis zur Lösung meines Problems haben könnte.
"Dreist" finde ich im übrigen eher derartige Antworten, deren konstruktiver Nutzen gegen Null geht. Aber wenn hier kapitale Kompetenzn ihr virtuelles Revier markierern müssen, dann will ich mit meinen Nichtigkeiten nicht im Wege stehen.
Kommunikationskultur? Eher nicht. Dein Posting ging eher in Richtung persönliche Beledigung; daher ist auch meine Antwort subjektiv gefärbt.
Also (herr oder frau?)hagen,
wenn ich dich richtig verstanden habe so meinst du funktioniere die javascript funktion openandclose() nicht bzw. es würde ein Javascriptfehler im brwoser erscheinen sobald die seite mit dem javascriptcode in einem frameset angezeigt wird.
Wenn das so ist, ich also deine fehleraussage richtig interpretiert habe, so tut es mir leid, denn ich kann keinen fehler finden.
Ich habe die ganze sache mal bei mir (IE6 auf win2000) laufen lassen und beide "versionen" (ohne frameset und mit frameset) funktionieren einwandtfrei.
Ich kann jetzt nur hoffen das ich dich fehlinterpretiert habe, oder du den fehler bereits selber schon gelöst bekommen hast.
mfg Urmel