bomber: FF und der Syntax-Error bei Variablendeklaration

Hallo,
kaum neu hier und schon eine Frage ;-)

Ich habe ein Problem mit einem Script, besser gesagt überhautpt ein riesen Problem.

Entweder ich bin blöd, oder FF will mich ärgern.

Nun zu meinem Script

<script language="Javascript">
pfadkom = window.location.search;
pfadkom = pfadkom.substring(1,pfadkom.length);
teilkette = pfadkom.split("$");
pfad = teilkette[0];
lname = teilkette [1];
pictoshow = teilkette[2];
aname = pfad + "/" + lname + "/" + lname + ".js";

function listeladen() {
   alert(aname);
   if(window.navigator.systemLanguage && !window.navigator.language) document.getElementsByTagName("script")[0].src = aname;
   else {var sElem = document.createElement('script');sElem.type = 'text/javascript';sElem.src = aname;document.getElementsByTagName('head')[0].appendChild(sElem);}
 }

</script>

Dass es nicht mehr so schön ist, liegt an meiner Probiererei. FF meldet immer den Fehler

Fehler: missing } in XML expression
Quelldatei: http://www.bomber-online.de/pics/gallery_viewer.htm?/gallery/misc$ereig_20060305$1$3
Zeile: 19, Spalte: 15
Quelltext:
   alert(aname);

mit Zeiger auf das Semikolon.
Jetzt meine Frage: Veräppelt der mich? Oder was ist falsch?

Für Hilfe wär ich dankbar.

Gruß
Bomber

  1. Hallo,

    <script src="" type="text/javascript"></script>

    Wenn du diese wenig sinnvolle Script-Einbindung herausnimmst, funktioniert es.

    Fehler: missing } in XML expression

    Da spinnt Firefox wohl.

    Mathias

    1. Hallo,

      <script src="" type="text/javascript"></script>

      Wenn du diese wenig sinnvolle Script-Einbindung herausnimmst, funktioniert es.

      Das habe ich nur drin, da IE einfach zu dämlich ist (oder bin doch ich es?) mich ein Script-Element erstellen zu lassen. Bin halt dann den Umweg über diese Script-Einbindung gegangen, der ich den Pfad zuordne.

      Fehler: missing } in XML expression

      Da spinnt Firefox wohl.

      Mathias

      Ich glaube meiner spinnt allgemein. Oder kannst du mir verraten, wo hier

      Fehler: syntax error
      Quelldatei: http://www.bomber-online.de/pics/gallery_viewer.htm?/gallery/people$tattoos$0$4
      Zeile: 19
      Quelltext:
      if (window.navigator.systemLanguage && !window.navigator.language) {

      ein Syntaxerror sein soll?

      Danke, übrigens für die Antwort.

      Bomber

      1. Hallo,

        <script src="" type="text/javascript"></script>
        Wenn du diese wenig sinnvolle Script-Einbindung herausnimmst, funktioniert es.

        Fehler: missing } in XML expression
        Da spinnt Firefox wohl.

        Ich glaube meiner spinnt allgemein.

        Du hast die Zeile

        <script src="" type="text/javascript"></script>

        demnach immer noch drin?

        Mit Deinem SCRIPT src="" verweist Du auf das aktuelle Dokument als Script vom Typ text/javascript. Demnach muss das gesamte aktuelle Dokument (von <html>... bis ... </html>) als Script interpretiert werden. Das bringt den FireFox aus dem Konzept.

        Was hast Du genau vor? So geht es jedenfalls nicht.

        viele Grüße

        Axel

        1. Was hast Du genau vor? So geht es jedenfalls nicht.

          viele Grüße

          Axel

          Ich will ein Script dynamisch einbinden. Da ich erst bei Aufruf der Datei den Script-Pfad ermitteln kann (Ist nur ein externes js-Array).

          Habs jetzt soweit auch hinbekommen, dadurch das ich diesen leeren Verweis weggelassen habe. Allerdings geht es jetzt nur im FF. IE erkennt mir das Array nicht, da die

          document.createElement('script')

          nicht funktioniert :-(

          Wie könnte ich dem IE den Pfad mitteilen???

          Bomber

          1. Hallo,

            Ich will ein Script dynamisch einbinden. Da ich erst bei Aufruf der Datei den Script-Pfad ermitteln kann (Ist nur ein externes js-Array).

            Habs jetzt soweit auch hinbekommen, dadurch das ich diesen leeren Verweis weggelassen habe. Allerdings geht es jetzt nur im FF. IE erkennt mir das Array nicht, da die

            document.createElement('script')

            nicht funktioniert :-(

            Nein, das kann nicht der Fehler sein. Das Folgende funktioniert beim mir im IE:

            Datei jstest.js

              
            var Text= new Array();  
            Text[0]="Hallo Welt";  
            Text[1]="Siehst Du,";  
            Text[2]="es geht doch.";  
            
            

            liegt im selben Verzeichnis wie:

              
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
                    "http://www.w3.org/TR/html4/strict.dtd">  
            <html>  
            <head>  
            <title>Titel</title>  
            <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
            <script type="text/javascript">  
            <!--  
            function scripteinbinden() {  
             var myscript = document.createElement("SCRIPT");  
             myscript.type="text/javascript";  
             myscript.src="jstest.js";  
             document.getElementsByTagName("HEAD")[0].appendChild(myscript);  
            }  
            //-->  
            </script>  
            </head>  
            <body onload="scripteinbinden();">  
            <button onclick="for(i=0;i<Text.length;i++)alert(Text[i]);">Test</button>  
            </body>  
            </html>  
            
            

            viele Grüße

            Axel

            1. Hallo,

              Ich will ein Script dynamisch einbinden. Da ich erst bei Aufruf der Datei den Script-Pfad ermitteln kann (Ist nur ein externes js-Array).

              Habs jetzt soweit auch hinbekommen, dadurch das ich diesen leeren Verweis weggelassen habe. Allerdings geht es jetzt nur im FF. IE erkennt mir das Array nicht, da die

              document.createElement('script')

              nicht funktioniert :-(
              Nein, das kann nicht der Fehler sein. Das Folgende funktioniert beim mir im IE:

              Datei jstest.js

              var Text= new Array();
              Text[0]="Hallo Welt";
              Text[1]="Siehst Du,";
              Text[2]="es geht doch.";

              
              >   
              > liegt im selben Verzeichnis wie:  
              >   
              > ~~~html
                
              
              > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
              >         "http://www.w3.org/TR/html4/strict.dtd">  
              > <html>  
              > <head>  
              > <title>Titel</title>  
              > <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">  
              > <script type="text/javascript">  
              > <!--  
              > function scripteinbinden() {  
              >  var myscript = document.createElement("SCRIPT");  
              >  myscript.type="text/javascript";  
              >  myscript.src="jstest.js";  
              >  document.getElementsByTagName("HEAD")[0].appendChild(myscript);  
              > }  
              > //-->  
              > </script>  
              > </head>  
              > <body onload="scripteinbinden();">  
              > <button onclick="for(i=0;i<Text.length;i++)alert(Text[i]);">Test</button>  
              > </body>  
              > </html>  
              > 
              
              

              viele Grüße

              Axel

              Also bei mir funktionierts im FF auch. IE macht mir immer noch Probleme.
              Da das Array etwas braucht um zu laden habe ich folgende Funktion geschrieben (die Array-variable heisst bild und Gesamtzahl wird mit übergeben):

                
              <script language="Javascript">  
              function testload() {  
              if (!bild[Gesamtzahl]) {window.setTimeout(testload(),100);}  
              else {picshow();}  
              }  
              </script>  
              
              

              FF stellt alles korrekt dar und es funktioniert auch. Nur IE meint "bild" ist undefiniert.

              Wie kann ich also sicherstellen, dass das Array auch wirklich geladen wurde?

              Danke übrigens, ihr helft mir echt weiter.

              Bomber

              1. Hallo,

                Also bei mir funktionierts im FF auch.

                Ja? Wo kann man das sehen?

                Da das Array etwas braucht um zu laden habe ich folgende Funktion geschrieben (die Array-variable heisst bild und Gesamtzahl wird mit übergeben):

                <script language="Javascript" >

                ^ Bitte auch hier type="text/javascript" angeben.

                function testload() {
                if (!bild[Gesamtzahl]) {window.setTimeout(testload(),100);}

                ^Um bild zu negieren, muss es bild erst mal geben. So etwas wie isset in PHP gibt es in JavaScript nicht.

                Du könntest mit try-catch arbeiten.

                function testload() {
                  try {
                   if(bild[Gesamtzahl]) picshow();
                  } catch(e) {
                   window.setTimeout(testload(),100);
                  }
                }

                FF stellt alles korrekt dar und es funktioniert auch.

                Ja? Wo? Siehe oben.

                Nur IE meint "bild" ist undefiniert.

                Mein FF meint das auch.
                Extras-JavaScript-Konsole

                viele Grüße

                Axel

                1. <script language="Javascript" >
                                                  ^ Bitte auch hier type="text/javascript" angeben.

                  function testload() {
                  if (!bild[Gesamtzahl]) {window.setTimeout(testload(),100);}
                          ^Um bild zu negieren, muss es bild erst mal geben. So etwas wie isset in PHP gibt es in JavaScript nicht.

                  Du könntest mit try-catch arbeiten.

                  function testload() {
                    try {
                     if(bild[Gesamtzahl]) picshow();
                    } catch(e) {
                     window.setTimeout(testload(),100);
                    }
                  }

                  Hallo,

                  habs jetzt mit "try/catch" probiert. FF funktioniert wieder mal, nur IE  bringt einen Stack overflow.

                  Ach ja, "bewundern" kann man das ganze unter

                  http://www.bomber-online.de bei Gallery. Die Seite ist noch nicht ganz fertig, also entschuldigt bitte nocht Quellcodefehler.

                  Nur eben der Fehler ... er macht mich noch wahnsinnig.

                  1. Hallo,

                    habs jetzt mit "try/catch" probiert. FF funktioniert wieder mal, nur IE  bringt einen Stack overflow.
                    http://www.bomber-online.de bei Gallery.

                    Ja, offensichtlich ist für den IE das Einbinden des SCRIPTs hier schon vergessen. Das heißt, es passiert überhaupt nicht mehr.

                    Bei Dir ist es so, dass Du das SCRIPT während des Rendervorgangs, also in dem Moment, wenn die Seite erst aufgebaut wird, in den HEAD einhängst.

                    Du könntest versuchen, es so zu machen, wie in meinem Beispiel:

                    • das Einbinden des SCRIPTs in eine Funktion schreiben
                    • diese Funktion BODY.onload aufrufen
                    • erst per Mausklick (BUTTON o.ä.) auf Bestandteile des eingebundenen SCRIPTs (bei Dir das Array bild[]) zugreifen

                    Bei Dir würde das bedeuten, dass in der Bilderschau zunächst kein Bild angezeigt wird. Das erste Bild kommt dann erst auf Mausklick.

                    Wenn das klappt, dann könntest Du versuchen, ob es auch funktioniert, wenn Du die testload()-Funktion einsetzt, um den ersten Mausklick den Nutzers überflüssig zu machen. Hier eventuell das timeout mal verlängern, um dem Browser mehr Zeit zum Laden des Arrays zu geben.

                    Möglicherweise wäre auch ein völlig anderer Ansatz (AJAX) für das, was Du da machen willst, besser. Per AJAX kann man HTTP-Requests direkt per JavaScript absetzen, ohne die Seite neu zu laden, also ohne window.location zu ändern.

                    Da ich aber keine Erfahrungen mit AJAX habe, kann ich Dir nur empfehlen mal nach "ajax tutorial" zu googlen.

                    viele Grüße

                    Axel

                    Pp: Gallery schreibt man Gallery(EN) oder Galerie(DE).

                    1. Noch mal ein Hallo,

                      Pp: Gallery schreibt man Gallery(EN) oder Galerie(DE).

                      Werd ich noch ausbessern. Danke für den Hinweis.

                      Übrigens hab ich mich jetzt entschlossen, die Galerie komplett anders zu lösen. Die Array-Datei ist zwar immer noch extern, steht aber nun fest in der "viewer"-Datei. Dazu hab ich jetzt das Programm, welches mir die Galerie erstellt umgeschrieben. War irgendwie einfacher für mich :-)

                      Falls übrigens Interesse an dem Programm besteht: Ich werde es in ca. 4-6 Wochen auf meiner Seite zum Download anbieten. Natürlich Freeware.

                      Gruß Bomber