DaKurt: Javascript funktion geht erst nach refresh (google chrome)

Hallo,

meine Seite (http://www.fsairlines.net) ist sehr stark AJAX basiert. Jetzt wollte ich aber, dass jede Seite, trotz AJAX einen eigenen Titel und eigene Meta-tags bekommt.

Dies habe ich nun realisiert in dem ich die Metatags und den Titel nach jedem ONLOAD und jedem AJAX-request per Javascript neu setzte.

Ich habe aber nun das Problem das meine Funktion updateMetatags():

function updateMetatags() {  
 var title = "FSAirlines - Enjoy a new dimension of flightsimming";  
 var description = "Create and manage your own Virtual Airline and compete against other VAs in a simulated environment or just sign up as a pilot and earn your money by flying for your favourite airline.";  
 var keywords = "Virtual Airlines,challange,competition,manage,pilots,client,flight tracker,microsoft flight simulator,fsx,fs2004,flightsim,routes,fleet,logbook,flightplan,free,finances";  
  
 var metatags = document.getElementsByTagName('meta');  
 var fsinfo = document.getElementsByTagName('meta_info');  
 if (fsinfo.length > 0) {  
  title = fsinfo[0].getAttribute('title');  
  description = fsinfo[0].getAttribute('description');  
  keywords = fsinfo[0].getAttribute('keywords');  
 }  
 parent.document.title = title;  
  
 if (metatags) {  
  for (cnt = 0; cnt < metatags.length; cnt++) {  
          var name = metatags[cnt].getAttribute("name");  
          var content = metatags[cnt].getAttribute("content");  
  
          if (metatags[cnt].getAttribute("name") == "description")  
                metatags[cnt].setAttribute("content", description);  
  
    if (metatags[cnt].getAttribute("name") == "keywords")  
                metatags[cnt].setAttribute("content", keywords);  
     }  
 }  
}

erst dann (bei Google Chrome) funktioniert, nachdem ich die Seite einmal refreshe, ansonsten sehe ich meistens nur das meine Funktion "not defined is".

Ich lade alle skripte im head und verstehe daher nicht warum er sie beim ersten aufruf der Seite nicht finden kann...
<head>
...

  
 <script type="text/javascript" src="meta.js"></script>  
 <script type="text/javascript" src="flynet.js"></script>  
 <script type="text/javascript" src="tooltips.js"></script>  
</head>  
<body onload="updateMetatags()">...  

vielen Dank!
DaKurt

  1. Hallo,

    CHrome hat einen JS--Debugger, eine Fehlerkonsole und einen Taskmanager, der angibt, wie stark der Tab belastet ist, vllt musst du nach dem body.onload noch ein bisschen warten, mit window.setrTimeout so lange warten, bis eine Variable, die in der letzen Datei am Ende definiert ist, vorhanden ist. Also so in etwa:

    script-tag File 1
    script-tag File 2
    script-tag File 3
    script-tag LoadDummyFile

    document.body.onload = function() {
        if(LoadDummyVariable) {
           // ...
        } else {
            window.setTimeout(arguments.callee ,10);
        }
    }

    und selbst dann noch bis zu 30 - 40 msec warten, bis der DOM-Baum vollständig ist. Das geht einfach, indem man alle 1-2 msec die Anzahl der childNOdes zählt, und wenn sie nicht mehr größer wird, ist der Baum fertig geladen...

    Oder ganz einfach:

    window.attachEvent('domready',function() {...});

    hoffe, ich konnte helfen...

    mfg, Flo

    --
    sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
    1. Moin.

      Oder ganz einfach:

      window.attachEvent('domready',function() {...});

      Woher hast du das? In meinem IE7 funktioniert das nicht, und laut MSDN ist 'domready' auch kein unterstütztes DHTML Ereignis...

      Christoph

      1. Hallo,

        Guck mal auf http://www.quirksmode.org unter events.

        Und dass das kein DHTML-Event is, ist auch gut so, denn ich bin froh, dass wir aus diesen Zeiten raus sind :)

        Genau dieses hab ich jetzt aus the west (the-west.de) wo alles funktioniert...

        mfg, Flo

        --
        sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
        1. Moin.

          Guck mal auf http://www.quirksmode.org unter events.

          Hab ich. Weder ich noch Google konnten ein 'domready' Ereignis finden (der erste Google-Treffer ist ein Skript von James Edwards, beim zweiten sagt Google 'These terms only appear in links pointing to this page').

          CHristoph

          1. Hallo,

            Sorry, quirksmode sollte nur wegen dem mit dem attachEvent sein, das Domready hab ich wie gesagt aus einem anderen Script:

              
            window.addEvent('domready', function()  
            {  
            //...  
            });  
            
            

            mfg, Flo

            --
            sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
            1. Moin.

              Warum änderst du den Code dann - denn mit attachEvent() funktioniert es nicht.

              Auch die addEvent()-Version funktioniert nur, weil auf the-west.de MooTools eingesetzt wird. Das ist eine JS-Bibliothek, die addEvent() und ein 'domready'-Ereignis zur Verfügung stellt.

              Christoph

              1. Hallo,

                Auch die addEvent()-Version funktioniert nur, weil auf the-west.de MooTools eingesetzt wird. Das ist eine JS-Bibliothek, die addEvent() und ein 'domready'-Ereignis zur Verfügung stellt.

                *g* ich dussel :)

                mfg, Flo

                --
                sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
                1. Hallo,

                  Auch die addEvent()-Version funktioniert nur, weil auf the-west.de MooTools eingesetzt wird. Das ist eine JS-Bibliothek, die addEvent() und ein 'domready'-Ereignis zur Verfügung stellt.
                  *g* ich dussel :)

                  mfg, Flo

                  Ja da bin ich ja froh das es schon so viele antworten gibt, aber leider isses etwas am Thema vorbei. Wie gesagt, sagt mir mein Chrome Inspector bei erstmaliger besichtigung der Seite "updateMetatags" not defined. Nach einem Refresh (F5) funktioniert alles einwandfrei. (Beim Firefox hab ich garkeine Probleme)...

    2. Hallo Flo,

      ich glaube es hat eher weniger mim DOM - Baum etwas zu tun, da ich ja nicht das Problem habe, dass meine JS-Funktion fehlschlägt, sondern diese erst garnicht geladen wird:

      "Uncaught ReferenceError: updateMetatags is not defined" (Chrome Inspector)

      Es ist zudem komisch, da beide Funktionen "updateMetatags" und "makeRequest" (für AJAX) in der flynet.js stehen. Die AJAX requests funktionieren dabei wunderbar, nur die updateMetatags-Funktion will er nicht sehen. Obwohl sie, wie gesagt, in der gleichen Datei weiter oben steht.

      Ihr könnt es auf der Homepage selber ausprobieren (mit Google Chrome!). Einfach drauf gehen, dann auf "The Client" klicken und es ändert sich nix...dann einmal F5 (refresh) drücken und dann nochmal auf "The Client" oder "Infos & Rules" und der Titel ändert sich.

      Beim Firefox & Opera funktioniert es meines Wissens nach wunderbar...(um den IE würd ich mich eh erst nachher kümmern wenns bei den standard-konformen Browsern funktioniert)

      Danke
      DaKurt

  2. Hallo,

    Bei mir gehts, ich verwende Chrome 1.0.154.36, aber ich hab gerade gesehen, dass ne neue version verfügbar ist, als ich die version nachgeguckt hab :)
    Ich melde mich gleich nochmal, falls es nicht funktionieren sollte...

    mfg, Flo

    --
    sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|