Michael Rolli: externe Codedatei dynamisch in eine Ebene einbinden

Hallo Leute,

in der Vergangenheit hat mir dieses Forum schon oft geholfen und so wende ich mich mal wieder vertrauensvoll an Euch alle.
Ich habe folgendes Problem/Frage:

Für mein Lernprogramm (Dissertation) möchte ich die Theorieinhalte dynamisch in eine Ebene schreiben lassen. Dass funktioniert bisher schon mal ganz gut:

function showText(id)
{
 text = "Hallo selfHTML-User, dies ist mein bisheriger Code!";

if (document.getElementById)
 {
  x = document.getElementById(id);
  x.innerHTML = text;
 }
 else if (document.all)
 {
  x = document.all[id];
  x.innerHTML = text;
 }
 else if (document.layers)
 {
  x = document.layers[id];
  x.document.open();
  x.document.write(text);
  x.document.close();
 }
}

Nun wäre es aber schön, da ich verschiedene Seiten/Inhalte nach einander in die Ebene schreiben möchte (und damit nicht der ganze Code in dieser Seite hocken muss), beim Aufruf der Funktion showtext zusätzlich eine Variable übergeben, die auf eine Textdatei mit HTML-Code der einzelnen Lerninhalte verweist. Dieser Inhalt sollte dann in die Variable text geschrieben werden, um ihn dann wie gehabt in die Ebene zu schreiben.
Hat hier jemand ne Idee, wie man an den Inhalt einer Text-Datei rankommt?

Vielen lieben Dank im voraus

Grüsse
Michael

  1. Hallo Michael!

    Hat hier jemand ne Idee, wie man an den Inhalt einer Text-Datei rankommt?

    An eine Text-Datei eher schwierig:
    http://www.teamone.de/selfaktuell/artikel/jsfileop/artikel.htm

    Mein Vorschlag wäre es einen Frameste zu machen. In einem Frame steht dein Code in einen anderen (0 Pixel grossem) Frame wird eine Datei nachgeladen.
    Das geht ja recht einfach (und auch dynamisch) per Script.
    Diese Datei enthält ein Formular mit z.b.einer Textarea mit deinem auszugebenden Text drin. Auf den kannst du dann per Script zugreifen.

    Trickreich ist dabei eigentlich nur das Timing, denn der Frame mit dem Text drin muss ja ganz geladen sein, bevor du drauf zugreifen kannst.

    Also bekommt der Datenframe ins body einen onLoad="parent.ausgabeframename.losgehts();" Aufruf
    der deiner Ausgabeseite sagt, dass sie loslegen kann.

    Gruss,
     Carsten

    1. Hallo Carsten!

      Danke für die schnelle Antwort. Sowas ähnliches habe ich auch schon überlegt und ich werde es wohl so machen müssen, wenn's sonst nicht geht. Aber eigentlich wollte ich frames wegen der Bookmark-Problematik vermeiden.
      Gäbe es nicht doch noch eine andere Möglichkeit. Für NN gab's ja mal die Eigenschaft src eines Layer's. Sowas wäre natürlich sehr praktisch. Gibt's Umwege für IE4+5 und NN 6?

      Ich habe noch an die Möglichkeit gedacht, den Code in eine js-Datei zu verpacken (und dort in eine Variable text) und diese js-Datei einzubinden (und hoffentlich die Variable noch ansprechen können :-)).
      Ginge vielleicht sogar, aber wie erreiche ich, eine bestimmte und nicht jedesmal die gleiche js-Datei einzubinden? <Script ... src="datei.js"> ist ja eher statischer Natur.

      Auf jeden Fall Danke für Deinen Denkanstoss. Mal sehen, ob's noch andere Ideen gibt. Sonst halt via frames.

      Gruss
      Michael

      1. Hallo Michael!

        Hallo Carsten!

        Danke für die schnelle Antwort. Sowas ähnliches habe ich auch schon überlegt und ich werde es wohl so machen müssen, wenn's sonst nicht geht. Aber eigentlich wollte ich frames wegen der Bookmark-Problematik vermeiden.

        Die Bookmarkproblematik kann man lösen indem man in die URL des Framesets die jeweiligen Frameurls reinschreibt und das dann per Script auswertet.

        Gäbe es nicht doch noch eine andere Möglichkeit. Für NN gab's ja mal die Eigenschaft src eines Layer's. Sowas wäre natürlich sehr praktisch. Gibt's Umwege für IE4+5 und NN 6?

        Da gibt es iframes.
        Da könnte man auch wieder den Formulartrick probieren.
        Inwieweit das hierbei mit dem Nachladen scripthaltiger Inhalte funktioniert weiss ich nicht.

        ...und dort in eine Variable text...

        Du kannst in den nachgeladenen Dateien auch <script> Bereiche unterbringen. Macht das Erstellen schwieriger, aber das Einlesen einfacher, und du kannst auch kompliziertere Datenstrukturen anlegen.

        Ginge vielleicht sogar, aber wie erreiche ich, eine bestimmte und nicht jedesmal die gleiche js-Datei einzubinden? <Script ... src="datei.js"> ist ja eher statischer Natur.

        per document.write(). Wie man weiter unten beim Posting von Oaktree sieht nicht ganz unproblematisch.

        Auf jeden Fall Danke für Deinen Denkanstoss. Mal sehen, ob's noch andere Ideen gibt. Sonst halt via frames.

        Die Framelösung funktioniert auf jeden Fall, ggfls muss du einfach einen Haufen Framesets erzeugen (für jede Bookmarkfähige Inhaltsdatei eine), damit man Bookmarken kann.

        Gruss,
         Carsten

        1. Hallo zusammen!

          Danke für Eure schnelle Antwort. Na dann werde ich mal testen, testen, testen... und wohl verzweifeln. Aber irgendwie wird's schon gehen.
          Eigentlich müsste in das Layer ja kein JS, eigentlich bräuchte ich ja nur HTML-Code mit Styleaufrufen per class oder id. Das css-file binde ich ja schon in der Hauptseite ein.

          Ich werde erstmal den Versuch von LanX testen und wenn's dann doch nicht klappt, kommen Carstens Frames zum Zuge.

          Gruss
          Michael

      2. Hi Michael,

        mit dem Ansatz den ich in http://www.teamone.de/selfaktuell/forum/?m=135175&t=25872

        oaktree vorgeschlagen habe brauchste keine frames, allerdings erscheint dann immer ne URL mit anderem suchstring ?textindex im Browser, der den namen der nachzuladenden datei.js angibt.

        Vorteil ist dann aber das alle Instanzen deiner Page bookmarkfähig waeren!

        Einschränkung: ich habs leider noch nicht getestet :-}

        Probier doch mal ;-)

        Tschau Rolf