Andreas Lindig: auf neue Dokumente in anderen Fenstern zugreifen

Hallo Forum,

wenn ich von Fenster A aus ein Fenster B öffne (window.open) und und von diesem aus wiederum in Fenster A mit location.href ein neues Dokument lade, dann kann ich auf das neue Dokument nicht zugreifen. Mozilla meldet: "uncaught exeption: Die Erlaubnis für das Lesen der Eigenschaft HTMLdocument.getElementsByTagName wurde verweigert".

Das bekomme ich allerdings nur online. Bei dem gleichen Vorgang über meinen lokalen Server passiert das nicht.
Was kann ich da tun?

Gruß, Andreas

--
SELFFORUM - hier werden Sie geholfen,
auch in Fragen zu richtiges Deutsch
  1. 你好 Andreas,

    wenn ich von Fenster A aus ein Fenster B öffne (window.open) und und von
    diesem aus wiederum in Fenster A mit location.href ein neues Dokument
    lade, dann kann ich auf das neue Dokument nicht zugreifen. Mozilla
    meldet: "uncaught exeption: Die Erlaubnis für das Lesen der Eigenschaft
    HTMLdocument.getElementsByTagName wurde verweigert".

    Hat sich zufaellig die Domain geaendert?

    Was kann ich da tun?

    Wenn sich die Domain geaendert hat: gar nichts.

    Whatever, du solltest schon ein Beispiel oder den Code veroeffentlichen,
    sonst muss man im Dunklen herumstochern.

    再见,
     CK

    --
    Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
    http://wwwtech.de/
    1. Hallo Christian,

      Hat sich zufaellig die Domain geaendert?

      ja.

      Was kann ich da tun?
      Wenn sich die Domain geaendert hat: gar nichts.

      wie kommt das? und wäre es vielleicht eine Möglichkeit das Ganze in ein stehendes Frameset zu packen, wo die äußere Domain immer gleich bleibt? Ich habe es gerade mal mit einer anderen Datei im gleichen Verzeichnis (also gleiche domain) getestet: das geht.

      Whatever, du solltest schon ein Beispiel oder den Code veroeffentlichen,
      sonst muss man im Dunklen herumstochern.

      Hier ein Beispiel: in die Seite doppelklicken und im geöffneten Palettenfenster mit dem file-Upload Button eine neue Adresse einladen. Wenn sie geladen ist kannst Du auf "einlesen" klicken.

      Gruß, Andreas

      --
      SELFFORUM - hier werden Sie geholfen,
      auch in Fragen zu richtiges Deutsch
      1. 你好 Andreas,

        Was kann ich da tun?
        Wenn sich die Domain geaendert hat: gar nichts.

        wie kommt das?

        Das ist eine Sicherheitsvorkehrung der Browser um zu unterbinden, dass du einfach so in fremden Seiten herum-JavaScript-est, auf Kosten der User.
        Du koenntest ja z. B. eine Bestellung von Amazon auf Kosten des Users
        machen, gaebe es diese Vorkehrung nicht.

        und wäre es vielleicht eine Möglichkeit das Ganze in ein stehendes
        Frameset zu packen, wo die äußere Domain immer gleich bleibt?

        Nein, vergiss es. Du hast auf Fenster, in denen die Domain gewechselt hat,
        keinen Zugriff mehr. Aus.

        Ich habe es gerade mal mit einer anderen Datei im gleichen Verzeichnis
        (also gleiche domain) getestet: das geht.

        Solange die Domain gleich bleibt greift diese Vorkehrung auch nicht.

        再见,
         CK

        --
        Nur die Weisesten und die Dümmsten können sich nicht ändern.
        http://wwwtech.de/
      2. Hallo Andreas,

        Was kann ich da tun?
        Wenn sich die Domain geaendert hat: gar nichts.

        wie kommt das?

        Das ist die sogenannte »Same Origin Policy«. Stell Dir vor, Du könntest ein Fenster per JS öffnen, in dem Du den URL einer Site lädst, wo ein Benutzer gerade eingeloggt ist. Du könntest so sensible Daten auslesen. Deswegen darfst Du mit JS nur auf die gleiche Domain zugreifen und Basta.

        und wäre es vielleicht eine Möglichkeit das Ganze in ein stehendes Frameset zu packen, wo die äußere Domain immer gleich bleibt?

        Nein. Die »Same Origin Policy« gilt sowohl für Frames als auch für Fenster als auch für sonstige Konstrukte. Wenn Du eine Möglichkeit findest, die »Same Origin Policy« alleine durch JavaScript zu umgehen, dann hast Du eine gravierende Sicherheitslücke in den betroffenen Browsern gefunden.

        Ich habe es gerade mal mit einer anderen Datei im gleichen Verzeichnis (also gleiche domain) getestet: das geht.

        Ja.

        Viele Grüße,
        Christian

        1. Hallo Christian,

          Wenn Du eine Möglichkeit findest, die »Same Origin Policy« alleine durch JavaScript zu umgehen, dann hast Du eine gravierende Sicherheitslücke in den betroffenen Browsern gefunden.

          hehe, die behalte ich dann aber für mich und wickle erstmal ein paar Bestellungen ab ;-)

          Gruß, Andreas

          --
          SELFFORUM - hier werden Sie geholfen,
          auch in Fragen zu richtiges Deutsch
  2. hmhm..., das schmeißt mein ganzes Konzept übern Haufen. Gibt es denn irgendeine Möglichkeit an den HTML-Quelltext einer Fremden Seite zu kommen? Also, es könnte ja auch mit PHP sein, sodaß ich den Quelltext auf den eigenen Server kopieren kann oder so... Der Zweck ist, daß man in dem genannten Beispiel eine beliebige Seite einladen und bearbeiten kann - natürlich nur die Kopie. Um das Original geht es ja gar nicht. Man muß am Ende einen Link verschicken können - in dem steht dann die Adresse des Programms (Farbfinder), als Parameter die Adresse der bearbeiteten Seite und eine Reihe von Name=Wert-Paaren, welche Farben welchen Objekten zugewiesen wurden. Der Empfänger kann mit diesem Link direkt das Ergebnis sehen und kann, da der Link primär auf das JS-Programm zeigt, gleich weiterarbeiten und wieder Veränderungen durchführen.

    Das wäre sehr praktisch für den Austausch unter Webdesignern.

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch
    1. 你好 Andreas,

      hmhm..., das schmeißt mein ganzes Konzept übern Haufen. Gibt es denn
      irgendeine Möglichkeit an den HTML-Quelltext einer Fremden Seite zu
      kommen? Also, es könnte ja auch mit PHP sein, sodaß ich den Quelltext
      auf den eigenen Server kopieren kann oder so...

      Klar kannst du den Source per PHP absaugen. Dauert halt einfach etwas, und
      verursacht dir Traffic. Und du darfst nicht vergessen, auch referenzierte
      Dateien (Bilder, CSS-Files, etc) mitzusaugen.

      再见,
       CK

      --
      Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
      http://wwwtech.de/
      1. Klar kannst du den Source per PHP absaugen.

        äh, ja mir fehlt da der Denkansatz. Normalerweise gebe ich ja mit PHP nur was aus oder leite irgendwohin weiter. Wenn ich das Dokument auslesen will, muß ich es doch erstmal irgendwo reinladen oder?

        Gruß, Andreas

        --
        SELFFORUM - hier werden Sie geholfen,
        auch in Fragen zu richtiges Deutsch
        1. 你好 Andreas,

          Klar kannst du den Source per PHP absaugen.

          äh, ja mir fehlt da der Denkansatz. Normalerweise gebe ich ja mit PHP
          nur was aus oder leite irgendwohin weiter. Wenn ich das Dokument auslesen
          will, muß ich es doch erstmal irgendwo reinladen oder?

          Ja. Wenn dein Provider allow_url_fopen an hat, dann kannst du fopen benutzen,
          um die Seite (und die anderen Ressourcen) einzulesen. Ansonsten musst du dir
          wohl mit fsockopen einen abwurschteln.

          再见,
           CK

          --
          Wenn gewöhnliche Menschen Wissen erlangen, sind sie weise. Wenn Weise Einsicht erlangen, sind sie gewöhlnliche Menschen.
          http://wwwtech.de/
          1. Wenn dein Provider allow_url_fopen an hat,

            jo.

            dann kannst du fopen benutzen,
            um die Seite (und die anderen Ressourcen) einzulesen.

            das ist ja voll einfach :-) das geht sogar mit file().

            dankeschön
            Gruß, Andreas

            --
            SELFFORUM - hier werden Sie geholfen,
            auch in Fragen zu richtiges Deutsch
  3. Hallo Forum,

    wenn ich von Fenster A aus ein Fenster B öffne (window.open) und und von diesem aus wiederum in Fenster A mit location.href ein neues Dokument lade, dann kann ich auf das neue Dokument nicht zugreifen. Mozilla meldet: "uncaught exeption: Die Erlaubnis für das Lesen der Eigenschaft HTMLdocument.getElementsByTagName wurde verweigert".

    Dann hast Du vermutlich versucht, auf ein fremdes Dokument zuzugreifen.

    Das bekomme ich allerdings nur online. Bei dem gleichen Vorgang über meinen lokalen Server passiert das nicht.

    Wie gesagt: fremdes Dokument. Was würdest Du davon halten, wenn jemand Deine Website auf diese Weise öffnen läßt und sie dann per Javasript beliebig manipuliert, Links ummodelt und Inhalte verändert?

    Was kann ich da tun?

    Nachdenken.