Vela: get ElementsByTagName aus neuem Fenster

Hallo, seit Tagen arbeite ich daran, den Textinhalt eines Listenpunkt in HTML-Dokument2 via Javascript in HTML-Dokument1 zu schreiben. In einem Script-Bereich des HTML-Dokuments1 schrieb ich also:
var dokument2 = window.open('http://myDomain.de/dokument2.html', 'dokument2');
document.write (top.dokument2.getElementsByTagName("ul")[0].firstChild);

Dies funktioniert nicht und ich kapiere nicht, warum. Das betreffende Fenster wird zwar geöffnet und Dokument2 geladen, doch der Textinhalt wird nicht in Dokument1 geschrieben und es wird auch keine Fehlermeldung ausgegeben. Hole ich hingegen via "getElementsByTagName" Textinhalte aus Dokument1, werden diese in Dokument1 auch geschrieben:
var punkt1 = document.getElementsByTagName("ul")[0].firstChild;
document.write(punkt1.firstChild.nodeValue);

Jetzt bin ich als völlige Javascript-Novize am Zweifeln. Entweder habe ich den DOM-Tree noch nicht begriffen oder es gibt da irgendeine obscure "Security", die den Zugriff auf die Inhalte in Dokument2 verhindert. Letzteres halte ich für nicht unwahrscheinlich. Jedoch habe ich dazu nichts in dieser oder einer anderen Dokumentation gefunden. Überall heißt es, der Zugriff müsse über DOM möglich sein, z.B. hier:
http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

Ich habe also genau genommen vier Fragen:
1. Warum funktioniert mein Code nicht?
2. Gibt es Sicherheitsbeschränkungen?
3. Wenn ja, warum ist das nicht dokumentiert?
4. Was muß ich tun, um mein Problem zu lösen?

  1. Hi,

    var dokument2 = window.open('http://myDomain.de/dokument2.html', 'dokument2');

    Du weist den Browser an en Dokument zu laden und ...

    document.write (top.dokument2.getElementsByTagName("ul")[0].firstChild);

    ... wartest nicht ab, bis er dies tut.

    1. Was muß ich tun, um mein Problem zu lösen?

    Warte, bis die Seite geladen ist, oder einfacher: Soll das Popup doch selbst den Code schreiben:

    opener.document.write(document.getElementsByTagName("ul")[0].firstChild);

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. @Struppi:

      dokument2 ist kein document sondern ein window und besitzt folglich keine Funktion getElementsByTagName.

      Aber in dem window befindet sich doch ein document, welches ich darin geöffnet habe, könnte ich mich dann mit einem dokument2.document.getElementsByTagName() retten? Es muß doch möglich sein, sich anhand des Fensters irgendwie in die HTML-Struktur des darin befindlichen Dokuments reinzuarbeiten.

      Wenn die Domain in deinem Popup eine andere ist als in dem Hauptfenster, dann ja und es gibt auch keine Chance das zu umgehen.

      In der Tat, das ist sie. Die Hauptseite liegt auf meiner Festplatte und die Domain des Popups ist meine Homepage. Aber was genau verhindert dann, die Kommunikation zwischen den Dokumenten? Die Sprache stellt doch eigentlich alles Nötige bereit, zumindest ist es das, was ich aus diesem Tutorial hier herausgelesen habe.

      @Cybaer:

      Du weist den Browser an en Dokument zu laden und wartest nicht ab, bis er dies tut.

      Hm, daran hatte ich wirklich nicht gedacht. Würde es denn funktionieren, wenn ich etwas wie window.setTimeout(document.write(foobar + blafasel), 10000); schreiben würde? Oder müßte ich da komplexere Anweisungen geben?

      oder einfacher: Soll das Popup doch selbst den Code schreiben: opener.document.write(document.getElementsByTagName("ul")[0].firstChild);

      An eine solche Lösung hatte ich auch schon gedacht. Mein Versuch ergab aber gerade folgende Fehlermeldung: uncaught exception: Die Erlaubnis für das Lesen der Eigenschaft HTMLDocument.write wurde verweigert

      Heißt das, dass ich, auch wenn ich den Javascript-Code für das document.write in Dokument2 ausgebe, nicht mit Dokument1 kommunizieren kann, wenn dieses nicht auf der selben Domain liegt? Hargh!

      Liegt das am Browser und wenn ja, gibt es da irgendein runtime parser foobar compiler über den ich das Script ausführen könnte, ohne auf den Browser zurückgreifen zu müssen? Oder sollte ich Javascript aufgeben und mich besser auf Perl, Python, Ruby konzentrieren?

      1. Hi,

        In der Tat, das ist sie. Die Hauptseite liegt auf meiner Festplatte und die Domain des Popups ist meine Homepage. Aber was genau verhindert dann, die Kommunikation zwischen den Dokumenten?

        Keine auch nur irgendwie geartete Chance.

        Die Sprache stellt doch eigentlich alles Nötige bereit, zumindest ist es das, was ich aus diesem Tutorial hier herausgelesen habe.

        So ist es - sofern sich die Seiten auf der gleichen Domain befinden.

        Domainübergreifender Zugriff werden duch die Sicherheitsbestimmungen verhindert.

        D.h., eine Möglichkeit gibt es: Installiere

        An eine solche Lösung hatte ich auch schon gedacht. Mein Versuch ergab aber gerade folgende Fehlermeldung: uncaught exception: Die Erlaubnis für das Lesen der Eigenschaft HTMLDocument.write wurde verweigert

        Zja, jetzt weißt Du, warum. ;)

        Liegt das am Browser und wenn ja, gibt es da irgendein runtime parser foobar compiler über den ich das Script ausführen könnte, ohne auf den Browser zurückgreifen zu müssen? Oder sollte ich Javascript aufgeben und mich besser auf Perl, Python, Ruby konzentrieren?

        Ja, serverseitige Sprachen haben keine Probleme damit.

        Aber eine serverseitige Sprache im Web (=Popup) hat keinen Zugriff auf deine Platte! Du kannst natürlich einen lokalen Webserver bei dir auf dem PC installieren, der sich Daten aus dem Web holt, oder dann den Webserver z.B. via dyndns.org temporär öffentlich machen (dann würde das mit dem Popup klappen).

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hallo, seit Tagen arbeite ich daran, den Textinhalt eines Listenpunkt in HTML-Dokument2 via Javascript in HTML-Dokument1 zu schreiben. In einem Script-Bereich des HTML-Dokuments1 schrieb ich also:
    var dokument2 = window.open('http://myDomain.de/dokument2.html', 'dokument2');
    document.write (top.dokument2.getElementsByTagName("ul")[0].firstChild);

    dokument2 ist kein document sondern ein window und besitzt folglich keine Funktion getElementsByTagName.

    Mit firstChild solltest du vorsichtig sein, je nach Browser und Inhalt können da unterschiedliche Sachen drin stehen.

    Dies funktioniert nicht ...

    Falls du Firefox oder einen anderen Mozillabrowser benutzt schau mal in JS Konsole (unter dem Menü Extras im FF), wenn nicht schleunigst installieren, der IE ist zum entwickeln von JS aus diversen Gründen ungeeignet.

    1. Gibt es Sicherheitsbeschränkungen?

    Wenn die Domain in deinem Popup eine andere ist als in dem Hauptfenster, dann ja und es gibt auch keine Chance das zu umgehen.

    Struppi.

    --
    Javascript ist toll (Perl auch!)