Dringende Javascript-Hilfe gesucht...

Dieses Thema im Forum "Software" wurde erstellt von adrianlanglauf, 26. September 2004.

  1. adrianlanglauf

    adrianlanglauf New Member

    Nabends,

    ich bin sehr auf die Hilfe von den Javascript-Profis angewiesen...
    Folgendes Problem: ich habe gerade die website unserer Gemeinde in Arbeit (ich bin nur Laie, kein Profi!) und nun hinsichtlich Navigation ein Javascript eingebaut (ein vertikal mitscrollendes Menu, das auf der Seite versteckt ist).

    Lokal hat bei mir alles einwandfrei funktioniert, jetzt im web kommt beim IE immer eine Fehlermeldung ("Fehler in Zeile 8, Objekt fehlt")? Mit Mozilla, Firefox und Safari läuft das ganze einwandfrei, nur mit dem IE (sowohl beim PC als auch beim Mac läuft das Script offensichtlich nicht und der User steht unter Navigation da...:crazy:

    In der Anleitung des Scripts stand, dass es sowohl für den IE als auch für Netscape geeignet sei, nun habe ich das auch angenommen - und jetzt stehe ich belämmert da.

    Nun meine Bitte an euch: könntet ihr bitte mal die Seiten ansteuern, ob ihr einen Fehler oder sonst etwas entdeckt (bzw. ob bei euch vielleicht das Skript auf dem PC läuft!), das nicht in Ordnung ist (wäre echt wichtig)!?

    www.ramsau.at/start.html
    www.ramsau.at/aktuelles.html

    Übrigens, ich habe auch schon versucht, die beiden externen Skripte direkt im Quelltext einzubauen - hat auch nichts bewirkt...
    Ich wäre einfach auch sehr dankbar für feedback "geht/geht nicht" und Angabe des Browsers/Betriebssystems (außer OSX) (bei mir läuft es auf dem Mac nur nicht auf dem IE und beim Opera).

    Bitte sehr um eure Hilfe! Herzlichen Dank und Gruß,
    adrianlanglauf
     
  2. BleedingMoon

    BleedingMoon New Member

    Also, was mir bis jetzt aufgefallen ist, ist dass die Browserüberprüfung bzw. -abfrage nicht richtig funktioniert.

    Wenn man nämlich in die buildMenu-Funktion das hier einbaut

    PHP:
    function buildMenu() {
        if(
    IE){document.write('<h1>TEST TEST TEST IE </h1>');}
        if(
    NS6){document.write('<h1>TEST TEST TEST NS6 </h1>');}
    wird nur bei mozilla und co diese test-überschrift ausgegeben. Bei IE tut sich weiterhin überhaupt nichts.
    Kann natürlich auch an etwas anderem liegen, aber ich "schieb" es jetzt auf das Problem.

    Vielleicht hilft dir das schon mal weiter.

    *weitercodedurchschau*


    oh, ich seh grad dass hier auch nichts passiert

    PHP:
    function buildMenu() {
        
    document.write('<h1>BLUBB</h1>');
        if(
    IE){document.write('<h1>TEST TEST TEST IE </h1>');}
        if(
    NS6){document.write('<h1>TEST TEST TEST NS6 </h1>');}
    Also mag der IE schon vorher das Skript nicht.
     
  3. adrianlanglauf

    adrianlanglauf New Member

    Vielen Dank erstmal für die Hilfe!
    Wie gesagt - ich bin Laie... Du hast etwas von Browserüberprüfung geschrieben - muss ich diese manuell im Code einbauen (ich habe dahingehend nichts gemacht - nur im Javascript steht dahingehend nachfolgender Code drin) oder geschieht das automatisch?

    adrianlanglauf

    Javascript-Code (für das "Allgemeine", das 2. Script zur Einstellung des Menüs enthält nur spezifische Einstellungen zum Aussehen des Menüs):
    <!--

    /*
    Copyright © MaXimuS 1999-2001, All Rights Reserved.
    Site: http://maximus.ravecore.com
    E-mail: maximus@nsimail.com
    Script: Static Slide Menu
    Version: 6.5.3.6 (Temporary)
    */

    NS6 = (document.getElementById&&!document.all)
    IE = (document.all)
    NS = (navigator.appName=="Netscape" && navigator.appVersion.charAt(0)=="4")

    tempBar='';barBuilt=0;lastY=0;sI=new Array();moving=setTimeout('null',1);

    function moveOut() {if (parseInt(ssm.left)<0) {clearTimeout(moving);
    moving = setTimeout('moveOut()', slideSpeed);slideMenu(10)}
    else {clearTimeout(moving);moving=setTimeout('null',1)}};
    function moveBack() {clearTimeout(moving);moving = setTimeout('moveBack1()', waitTime)}
    function moveBack1() {if (parseInt(ssm.left)>(-menuWidth)) {clearTimeout(moving);
    moving = setTimeout('moveBack1()', slideSpeed);slideMenu(-10)}
    else {clearTimeout(moving);moving=setTimeout('null',1)}}
    function slideMenu(num){ssm.left = parseInt(ssm.left)+num;
    if (NS) {bssm.clip.right+=num;bssm2.clip.right+=num;
    if(bssm.left+bssm.clip.right>document.width)document.width+=num}}

    function makeStatic() {
    winY=(IE)?document.body.scrollTop:window.pageYOffset;
    if (winY!=lastY&&winY>YOffset-staticYOffset) {
    smooth = .2 * (winY - lastY - YOffset + staticYOffset);}
    else if (YOffset-staticYOffset+lastY>YOffset-staticYOffset&&winY<=YOffset-staticYOffset) {
    smooth = .2 * (winY - lastY - (YOffset-(YOffset-winY)));}
    else {smooth=0}
    if(smooth > 0) smooth = Math.ceil(smooth);
    else smooth = Math.floor(smooth);
    bssm.top=parseInt(bssm.top)+smooth
    lastY = lastY+smooth;
    setTimeout('makeStatic()', 10)}

    function buildBar() {
    if(barText.toLowerCase().indexOf('<img')>-1) {tempBar=barText}
    else{for (b=0;b<barText.length;b++) {tempBar+=barText.charAt(b)+"
    "}}
    document.write('<td align="center" rowspan="100" width="'+barWidth+'" bgcolor="'+barBGColor+'" valign="'+barVAlign+'" align=center><font face="'+barFontFamily+'" Size="'+barFontSize+'" COLOR="'+barFontColor+'">'+tempBar+'</font></td>')}

    function initSlide() {
    if (NS6||IE){ssm=(NS6)?document.getElementById("thessm"):document.all("thessm");
    bssm=(NS6)?document.getElementById("basessm").style:document.all("basessm").style;
    bssm.clip="rect(0 "+ssm.offsetWidth+" "+(((IE)?document.body.clientHeight:0)+ssm.offsetHeight)+" 0)";
    bssm.visibility="visible";ssm=ssm.style;if(NS6)bssm.top=YOffset}
    else if (NS) {bssm=document.layers["basessm1"];
    bssm2=bssm.document.layers["basessm2"];ssm=bssm2.document.layers["thessm"];
    bssm2.clip.left=0;ssm.visibility = "show";}
    if (menuIsStatic=="yes") makeStatic();}

    function buildMenu() {
    if (IE||NS6) {document.write('<DIV ID="basessm" style="visibility:hidden;Position : Absolute ;Left : '+XOffset+' ;Top : '+YOffset+' ;Z-Index : 20;width:'+(menuWidth+barWidth+10)+'"><DIV ID="thessm" style="Position : Absolute ;Left : '+(-menuWidth)+' ;Top : 0px ;Z-Index : 21;'+((IE)?"width:1px":"")+'" onmouseover="moveOut()" onmouseout="moveBack()">')}
    if (NS) {document.write('<LAYER name="basessm1" top="'+YOffset+'" LEFT='+XOffset+' visibility="show" onload="initSlide()"><ILAYER name="basessm2"><LAYER visibility="hide" name="thessm" bgcolor="'+menuBGColor+'" left="'+(-menuWidth)+'" onmouseover="moveOut()" onmouseout="moveBack()">')}
    if (NS6){document.write('<table border="0" cellpadding="0" cellspacing="0" width="'+(menuWidth+barWidth+2)+'" bgcolor="'+menuBGColor+'"><TR><TD>')}
    document.write('<table border="0" cellpadding="0" cellspacing="1" width="'+(menuWidth+barWidth+2)+'" bgcolor="'+menuBGColor+'">');
    for(i=0;i<sI.length;i++) {
    if(!sI[3]){sI[3]=menuCols;sI[5]=menuWidth-1}
    else if(sI[3]!=menuCols)sI[5]=Math.round(menuWidth*(sI[3]/menuCols)-1);
    if(sI[i-1]&&sI[i-1][4]!="no"){document.write('<TR>')}
    if(!sI[1]){
    document.write('<TD BGCOLOR="'+hdrBGColor+'" ALIGN="'+hdrAlign+'" VALIGN="'+hdrVAlign+'" WIDTH="'+sI[5]+'" COLSPAN="'+sI[3]+'"><font face="'+hdrFontFamily+'" size="'+hdrFontSize+'" COLOR="'+hdrFontColor+'">'+sI[0]+'</TD>')}
    else {if(!sI[2])sI[2]=linkTarget;
    document.write('<TD BGCOLOR="'+linkBGColor+'" onmouseover="bgColor=\''+linkOverBGColor+'\'" onmouseout="bgColor=\''+linkBGColor+'\'" WIDTH="'+sI[5]+'" COLSPAN="'+sI[3]+'"><ILAYER><LAYER onmouseover="bgColor=\''+linkOverBGColor+'\'" onmouseout="bgColor=\''+linkBGColor+'\'" WIDTH="100%" ALIGN="'+linkAlign+'"><DIV ALIGN="'+linkAlign+'"><FONT face="'+linkFontFamily+'" Size="'+linkFontSize+'">'+sI[0]+'</DIV></LAYER></ILAYER></TD>')}
    if(sI[4]!="no"&&barBuilt==0){buildBar();barBuilt=1}
    if(sI[4]!="no"){document.write('</TR>')}}
    document.write('</table>')
    if (NS6){document.write('</TD></TR></TABLE>')}
    if (IE||NS6) {document.write('</DIV></DIV>');setTimeout('initSlide();', 1)}
    if (NS) {document.write('</LAYER></ILAYER></LAYER>')}}

    function addHdr(name, cols, endrow){sI[sI.length]=[name, '', '', cols, endrow]}

    function addItem(name, link, target, cols, endrow){if(!link)link="javascript://";sI[sI.length]=[name, link, target, cols, endrow]}

    //-->
     
  4. BleedingMoon

    BleedingMoon New Member

    LOL SHIT!!!

    Fehler gefunden:
    Der Javascript-Code war nur an der falschen Stelle eingebunden.
    Es muss anscheinend bereits etwas in das Document geschrieben sein, damit das Menü-Überhaupt aufgestellt werden kann.

    Geh einfach in dein HTML-File bzw. Template und bin de das Menü am Besten irgendwo in den Body-Bereich ein oder gleich ganz unten auf der Seite z.B nach diesem "

    </p>" wo du das andere Javascript dingens eingebunden hast

    also
    PHP:
            <script SRC="ssm.js" language="JavaScript1.2"></SCRIPT
    <
    script SRC="ssmitems-home.js" language="JavaScript1.2"></SCRIPT>
    das oben aus dem header - bereich raus und dafür nach dem "

    </p>" reinsetzen!

    das müßte dann hoffentlich klappen
    *daumendrück*


    Das andere blahblah im oberen Post von mir kannste dann getrost vergessen. Mit dem Skript an sich ist alles in Ordnung!
     
  5. adrianlanglauf

    adrianlanglauf New Member

    BleedingMoon, du bist ein Genie!!! Wie kann ich mich revanchieren? Kriege ich einmal einen Javascript-Kurs bei dir?

    Da wäre ich ja nie drauf gekommen - in der Anleitung steht auch, das ganze sei im Header einzubauen...

    Jedenfalls nochmals vielen vielen Dank - du hast mich jetzt vor einer schlaflosen Nacht bewahrt!:)

    Bis demnächst, viele Grüße,
    adrianlanglauf
     
  6. BleedingMoon

    BleedingMoon New Member

    Gern geschehen!
    Das war jetzt wenigstens eine gute Übung für mich, ich schreib nämlich nächste Woche ne Internettechnologie-Klausur, bei dem u.a. JS vorkommt ;)

    Das war wenigstens mal ne gute Möglichkeit Lernen mit Forumslesen erfolgreich zu verbinden ;). Sonst gammel ich mich hier immer stundenlang rum und drück mich vorm Lernen :crazy:
     
  7. BleedingMoon

    BleedingMoon New Member

    P.S.: Yeah! Bei mir wird mir dein Menü nun im IE angezeigt.
     
  8. adrianlanglauf

    adrianlanglauf New Member

    Na dann alles Gute bei der Klausur!

    Da muss ich dich dann aber doch noch was fragen (hier bin ich bei dir sicher an der richtigen Adresse): warum schafft die Interpretation des Javascripts wie hier z.B. ein Browser wie Mozilla oder Netscape, aber nicht der IE (nur zum allgemeinen Verständnis der Materie wäre mir das wichtig)?
     
  9. BleedingMoon

    BleedingMoon New Member

    Das liegt daran, dass Javascript bzw. das DOM (Document Object Modell) in den zwei Browserkonkurrenten unterschiedlich implementiert wurde.

    Netscape und IE haben sich, wenn man so will, ihre eigenen Javascript Standards gesetzt, sodass man eine Abfragen bei Netscape anders gestalten muss, als beim IE und umgekehrt.

    Der Knackpunkt bei dieser Geschichte war wahrscheinlich, dass das Script beim IE gleich am Anfang etwas über das aktuelle Document (also das HTML-File abfrägt) und so wie ich es mir einfach grad logischerweise zusammen gereimt habe gabs da einfach zu dem Zeitpunkt das Document gar nicht (oder wie auch immer). Da beim Mozilla/Netscape diese Abfrage gar nicht durchgeführt wurde, wurde die Zeile Code einfach übersprungen und das Menü aufgebaut.

    An der Zeile wars wahrscheinlich gelegen:
    PHP:
    bodyWidth=(IE)?(document.body.offsetWidth-20):(window.innerWidth-20);
    (erste Abfrage in der ssmitems-Datei)

    Aber so ganz genau kann ich das auch net erklären ;) bzw. keine Garantie auf den obigen Erklärungsversuch.
     
  10. adrianlanglauf

    adrianlanglauf New Member

    Okay. Nochmals danke für deine Bemühungen - gut zu wissen, dass man hier bei den Browsern auf Unterschiedliches achten muss (als Laie ist man hier ja gleich mal überfordert).

    Gruß,
    adrianlanglauf
     
  11. oli

    oli New Member

    schau mal bei de.selfhtml.org unter dynamisches html nach. es gibts ein dom-modell, dass für alle browser gilt.
     

Diese Seite empfehlen