DOM: Aktualisieren über Frames hinweg
feelx
- javascript
0 Gernot Back0 MudGuard0 Felix (feelx)0 molily0 MudGuard0 Felix (feelx)0 molily
2 Thomas Meinike
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?
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
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
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
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
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
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
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
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
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
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
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
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
Hallo Thomas!
Ich danke Dir! das funktioniert bestens mit Deinem Vorschlag. Herzlichen Dank nochmals!
Gruss
Felix