jogggi: Javascript Include per appendChild bzw. insertBefore

Wenn ich einen "Include" per Javascript per appendChild bzw. insertBefore, dann kann ich nicht auf die in dem Include definierten Variablen zugreifen (xxx is not defined). Mache ich ein alert zwischen dem Include und der Variablenausgabe, dann klappt es.

Also ich habe irgendwie sowas:

var script = document.createElement("script");
script.type = "text/javascript";
script.src=url;
document.getElementsByTagName('head')[0].appendChild(script);

Im Javascript unter der url definiere ich eine var variable = 'xyz';

Auf diese kann ich nicht zugreifen, es sei denn ich mach ein alert(url) rein (kann auch was anderes im alert ausgeben) und schon geht es.

Wie bekomme ich das hin, dass die Variablen direkt verwendbar sind? Bin für jeden Tipp dankbar!

  1. Liebe(r) jogggi,

    hast Du das mit dem Timing begriffen? Welche Resourcen lädt der Browser wann und welche Auswirkungen hat das für JavaScript?

    Lesetipp: Verschiedene Zeitlichkeiten auflösen (Fader-Framework)

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Im Javascript unter der url definiere ich eine var variable = 'xyz';

    Auf diese kann ich nicht zugreifen, es sei denn ich mach ein alert(url) rein (kann auch was anderes im alert ausgeben) und schon geht es.

    Dein Script muss ja erst noch geladen werden. Das dauert (je nach Übertragungsgeschwindigkeit) ein wenig. Du musst also darauf warten, dass dein Script im Browser angekommen ist.
    Das ist allerdings nicht so einfach. Manche Browser werfen den Event onload, manche onreadystatechanged, manche beide aber manche auch gar kein Event.
    Also musst du letztendlich pollen (auf eine Variable im Script), um zu sehen, ob es geladen wurde.
    Eine Alternative wäre, das Script über ein XHR zu laden und mit eval auszuführen, dann hast du wenigstens sicher ein event, aber meist kann man auf das nachladen von Scripten auch ganz verzichten.

  3. Hallo jogggi,

    ich habe mal etwas mit dem Nachladen von Javascripten experimentiert:

    http://www.j-berkemeier.de/test/Nachladen.html

    Im Quelltext steht, welche Version synchron oder asynchron läuft, und welcher Browser nicht mitspielt.

    Nach meinem jetzigen Kenntnisstand empfehle ich dir für synchrones Nachladen die Version 1b mit ".text".

    Gruß, Jürgen

    1. Ich würde eher zu deiner Version 2 raten, aber asynchron, wenn du schon über XHR gehst.
      Version 2, weil du so auch den Code auch debuggen kannst.
      Und warum synchron, du hast ja ein definiertes Event.

      1. Hallo unknown,

        Und warum synchron, du hast ja ein definiertes Event.

        synchron war bei meinen Tests "Pflicht", da ich die nachgeladenen Scripte sofort benötigte und nicht ändern wollte.

        Gruß, Jürgen