feelx: DOM: Aktualisieren über Frames hinweg

Hallo Leute

Um etwas W3C DOM zu üben, wollte ich folgendes erreichen:
Ein einfaches Frameset zeigt auf Frame A und Frame B. Wenn ich in Frame B auf einen Link clicke, sollte ein <span>xxxxx</span> ausgelesen werden, um eins addiert und wieder zurück geschrieben werden.

Dabe ich habe ich bewusst auf 'document.write' verzichtet, weil dies nicht mehr zulässig ist für XHTML. Ausserdem habe ich auf .innerHTML verzichtet, da dies kein Bestandteil der offiziellen W3C DOM Spezifikation ist.

Das Problem:
Meine Lösung funktioniert NUR im Firefox 1.0 und anderen Mozilla basierenden Browsern, wie Mozilla 1.75 oder Netscape 7.02.
Es funktioniert nicht wie erwartet mit IE 6, Opera 7.60, Konqueror 3.3.2.

Hier kann die simple Idee getestet und eingesehen werden:
http://feelx.ch/dom/jscounter_fs.html

Das interessante ist nun, wenn ich den counter aufdieselbe Art und weise zugreife, der aber im gleichen Frame ist (auch Frame B).. Dann geht es in allen Browsern..
http://feelx.ch/dom1/jscounter_fs.html

Ist das ein Browser Problem?

  1. Hallo feelx,

    Das Problem:
    Meine Lösung funktioniert NUR im Firefox 1.0 und anderen Mozilla basierenden Browsern, wie Mozilla 1.75 oder Netscape 7.02.
    Es funktioniert nicht wie erwartet mit IE 6, Opera 7.60, Konqueror 3.3.2.

    Das ist ja deine Funktion

    function add()
    {
     var ele = parent.frame_a.document.getElementById("counter_a");
    ___________^^^^^^^^^^^^^^^^^^^^^^^^
     var alterwert = Number(ele.firstChild.nodeValue);
     var neuerwert = alterwert +1
     var ele1 = document.createTextNode(neuerwert);
    ____________^^^^^^^^
     ele.replaceChild(ele1, ele.firstChild);
    }

    Vielleicht solltest du lieber auch den Textknoten im Nachbarframe kreieren, wenn du ihn dort austauschen willst.

    Sonst versuch es doch auch mal mit data.

    Gruß Gernot

    1. Vielleicht solltest du lieber auch den Textknoten im Nachbarframe kreieren, wenn du ihn dort austauschen willst.

      Hallo Gernot
      Vielen Dank für deinen Vorschlag, das eigentliche Problem ist zwar behoben, da es aber v.a. um's Lernen geht, möchte ich noch eine Frage nachschieben. Heisst das, dass mit .createTextNode nur gearbeitet werden kann, wenn die TextNode auch imselben Frame kreiert wird? D.h. ich müsste in meinem Beispiel im Frame B eine Funktion in Frame A aufrufen, welche dann die Textnode kreeiert?

      Sonst versuch es doch auch mal mit data.

      'Data' ist mir leider noch unbekannt. Kannst du mir evtl. einen Link nennen, für weitere Infos oder ein Beispiel machen?
      Vielen Dank im Voraus und
      m.f.G.
      Felix

      1. Hallo Felix,

        Vielleicht solltest du lieber auch den Textknoten im Nachbarframe kreieren, wenn du ihn dort austauschen willst.

        Vielen Dank für deinen Vorschlag, das eigentliche Problem ist zwar behoben, da es aber v.a. um's Lernen geht, möchte ich noch eine Frage nachschieben. Heisst das, dass mit .createTextNode nur gearbeitet werden kann, wenn die TextNode auch imselben Frame kreiert wird? D.h. ich müsste in meinem Beispiel im Frame B eine Funktion in Frame A aufrufen, welche dann die Textnode kreeiert?

        Dieser Verdacht ist ja naheliegend, wenn du schreibst, dass es funktioniert, wenn sich alles im selben Dokument befindet. Mich wundert eigentlich eher, dass Mozilla/Firefox auch Knoten in ein Dokument einbauen kann, die in einem anderen Dokument erzeugt wurden.

        Sonst versuch es doch auch mal mit data.
        'Data' ist mir leider noch unbekannt. Kannst du mir evtl. einen Link nennen, für weitere Infos oder ein Beispiel machen?

        http://de.selfhtml.org/javascript/objekte/node.htm#data

        Aber im Prinzip sollte das im Bezug auf Textknoten dasselbe machen wie nodeValue, deine von Thomas modifizierte Funktion müsste dann auch mit data statt nodeValue funktionieren.

        Gruß Gernot

  2. Hi,

    Dabe ich habe ich bewusst auf 'document.write' verzichtet, weil dies nicht mehr zulässig ist für XHTML.

    Könntest Du bitte die Stelle zitieren, die das festlegt?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas

      Das steht hier
      http://ln.hixie.ch/?start=1091626816&count=1

      Darauf wird auch in bugzilla-Einträgen verwiesen. Der Autor ist ein Mitentwickler des Opera Teams.

      Hi,

      Dabe ich habe ich bewusst auf 'document.write' verzichtet, weil dies nicht mehr zulässig ist für XHTML.

      Könntest Du bitte die Stelle zitieren, die das festlegt?

      cu,
      Andreas

      1. Hi,

        Dabe ich habe ich bewusst auf 'document.write' verzichtet, weil dies nicht mehr zulässig ist für XHTML.
        Könntest Du bitte die Stelle zitieren, die das festlegt?
        http://ln.hixie.ch/?start=1091626816&count=1

        Nix offizielles.

        Ach ja, bitte sinnvoll zitieren und unterhalb des zitierten antworten.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Nix offizielles.

          Stimmt. Aber w3.org schon:
          http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite

          Ach ja, bitte sinnvoll zitieren und unterhalb des zitierten antworten.

          Entschuldigung. Werde es aber ab diesem Posting hier berücksichtigen. Versprochen.
          M.f.G.
          Felix

    2. Hallo,

      Dabe ich habe ich bewusst auf 'document.write' verzichtet, weil dies nicht mehr zulässig ist für XHTML.

      Könntest Du bitte die Stelle zitieren, die das festlegt?

      Gibt es keine. Trotzdem weigern sich die Browserprogrammierer vehement, document.write in »echtem« XHTML zuzulassen. Ein paar Links:
      http://ln.hixie.ch/?start=1091626816&count=1
      https://bugzilla.mozilla.org/show_bug.cgi?id=192367
      https://bugzilla.mozilla.org/show_bug.cgi?id=68193
      http://lists.w3.org/Archives/Public/www-html-editor/2004JulSep/0026.html

      Mathias

      1. Hi,

        Dabe ich habe ich bewusst auf 'document.write' verzichtet, weil dies nicht mehr zulässig ist für XHTML.
        Könntest Du bitte die Stelle zitieren, die das festlegt?
        Gibt es keine.

        Dacht ich's mir doch fast.

        Trotzdem weigern sich die Browserprogrammierer vehement, document.write in »echtem« XHTML zuzulassen.

        Das ist ja ganz was anderes.

        Aber nach der Logik könnte man ja auch behaupten, daß z.B. :hover für andere Elemente als a nicht _zulässig_ wäre, denn gewisse Browserprogrammierer weigern sich seit vielen Jahren, das zu implementieren ... ;-)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. Könntest Du bitte die Stelle zitieren, die das festlegt?

        Gibt es keine. Trotzdem weigern sich die Browserprogrammierer vehement, document.write in »echtem« XHTML zuzulassen. Ein paar Links:

        Hallo

        Sorry, hab dein Beitrag gar nicht gesehen. Doch ist schon offiziell und somit auch verständlich, dass Browserprogrammierer dies nicht mehr zulassen.
        http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite
        gruss
        Felix

        1. Sorry, hab dein Beitrag gar nicht gesehen. Doch ist schon offiziell und somit auch verständlich, dass Browserprogrammierer dies nicht mehr zulassen.
          http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite

          In meinem Posting habe ich absichtlich eine Kritik dieses Abschnitts der XHTML-FAQ verlinkt. Diese FAQ hat keinen normativen Charakter und die dort dargestellten Tatsachenbehauptungen werden von sehr vielen angezweifelt.

          Mathias

  3. Hallo,

    Hier kann die simple Idee getestet und eingesehen werden:
    http://feelx.ch/dom/jscounter_fs.html

    Die Funktion add() sollte in dieser Form den Wert erhoehen:

    function add()
    {
      var ele = parent.frame_a.document.getElementById("counter_a");
      var alterwert = Number(ele.firstChild.nodeValue);
      var neuerwert = alterwert + 1;
      ele.firstChild.nodeValue = neuerwert;
    }

    MfG, Thomas

    1. Hallo Thomas!

      Ich danke Dir! das funktioniert bestens mit Deinem Vorschlag. Herzlichen Dank nochmals!
      Gruss
      Felix