Sascha: appendChild / Frames / IE SP2

Hallo,

ich habe jetzt bereits einige Stunden probiert, gesucht und gelesen.
Jetzt muss ich doch fragen:

Ich habe ein Frameset, bestehend u.a. aus ausgabe und eingabe

In ausgabe steht ...<body id="ausgabebox">...
In eingabe steht folgendes script:

...
var target = parent.ausgabe.document.getElementById("ausgabebox");
var addline = document.createTextNode("Hallo");
target.appendChild(addline);
...

Im Mozilla geht alles prima, im IE kommt ein Scriptfehler
"Ungültiges Argument". Wenn ich zu Testzwecken eine einzige HTML-Seite bastle, also das appendChild ins gleiche Fenster erfolgt, gibt es keine Probleme.

Meine IE-Version: 6.0.2900.2180.xpsp_sp2_rtm.040803-2158. Den habe ich samt der neuen Sicherheitsrichtlinien stark in Verdacht. Nur, wenn Funktionalität wieder lokal abhängt ... aargh.

Sinn der ganzen Geschichte ist ein PHP-Chat. Der Null-Pixel hohe Transmitter-Frame submitted sich selbst im Intervall und "holt" die neuen Chat-Zeilen. Danach sollen diese in das Ausgabefenster eingehangen werden. Vorteil: Ich ziehe nicht immer das Ausgabefenster, welches durch die reloads flackert und unruhig wirkt.

Ich möchte andere Technologien wie Flash oder Java-Applets vermeiden.

Vielen Dank für Eure/Ihre Hilfe.

Grüße
Sascha

  1. Hallo Sascha.

    Im Mozilla geht alles prima, im IE kommt ein Scriptfehler
    "Ungültiges Argument". Wenn ich zu Testzwecken eine einzige HTML-Seite bastle, also das appendChild ins gleiche Fenster erfolgt, gibt es keine Probleme.

    Siehe http://msdn.microsoft.com/workshop/author/dhtml/overview/xpsp2compat.asp (unter "Object Caching").

    Freundschaft!
    Siechfred

    --
    Wissen bedeutet zu wissen, wo es steht.
  2. Hallo,

    Im Mozilla geht alles prima, im IE kommt ein Scriptfehler
    "Ungültiges Argument". Wenn ich zu Testzwecken eine einzige HTML-Seite bastle, also das appendChild ins gleiche Fenster erfolgt, gibt es keine Probleme.

    Meine IE-Version: 6.0.2900.2180.xpsp_sp2_rtm.040803-2158. Den habe ich samt der neuen Sicherheitsrichtlinien stark in Verdacht. Nur, wenn Funktionalität wieder lokal abhängt ... aargh.

    Das ist ein bereits vor dem SP2 bekanntes IE-Problem. Probiere es mal so:

    var target = parent.ausgabe.document.getElementById("ausgabebox");
    var addline = document.createElement("span");
    addline.appendChild(document.createTextNode("Hallo"));

    if(target.outerHTML)target.insertAdjacentHTML("beforeEnd",addline.outerHTML);
    else target.appendChild(addline);

    Wenn addline wirklich eine neue Zeile meint und nicht nur Inline-Content, dann statt span-Element ein p-Element erzeugen.

    MfG, Thomas

  3. Hi,
    probiers mal so:

    ...
    var target = parent.ausgabe.document.getElementById("ausgabebox");
    var addline = parent.ausgabe.document.createTextNode("Hallo");
    target.appendChild(addline);
    ...

    gruß
    peter

  4. Vielen Dank für Eure tolle Unterstützung.

    Ich habe mir jetzt eine Bullette ans Knie genagelt und mich von hinten erschossen.
    Nachdem ich mal die Threads zum Thema Chat und PHP gelesen hatte, war ich echt verzweifelt. Dass das so nicht zusammenpasst.
    Nun ja, ich habe es trotzdem gelöst:

    In einem Frame lasse ich mir jetzt ein Array schreiben von PHP:
    line[1]="<b>Nick:</b>Text";
    line[2]="<b>Nick:</b>Text";
    line[3]="<b>Nick:</b>Text";
    line[4]="<b>Nick:</b>Text";
    ...
    Maximal 30 Zeilen und keine älter als 5 Minuten.
    Der Anzeigeframe weiss stets, welche line er zuletzt ausgegeben hatte und liest dann bis zum Ende des Arrays.
    Eingebunden werden die Lines dann mit appendChild im eigenen Fenster so ist nix frame-übergreifend ausser den JS-Variablen.

    Ach ja, und damit der Anzeigeframe immer schön nach unten scrollt
    wollte ich Anker mit einer fortlaufenden Namensgebung "t1" bis "t(n)" einhängen und per self.location.hash = "t"+lastline scrollen. Klappt aber nicht. Ich mach das jetzt erstmal auf eine dummdämliche Art: self.scrollBy(0,1024);

    Danke für Eure Hilfe!!!

    Grüße
    Sascha

    Ach ja: Wer mal ein schönes php/html - Farbfeld: