tom: Zugriff auf Dokumente auf anderen Domains innerhalb eines framesets

Guten Tag allerseits!

Ich habe gerade folgendes Problem entdeckt:

Ich wollte eine URL-Weiterleitung auf einem fremden Server aktivieren, die auf Basis eines "100%,*"-Framesets arbeitet. Meine Seite würde also in einen den ganzen Bildschirm füllenden frame geladen werden

Nun wollte ich kontrollieren, ob die übergeordnete Seite sich im top-frame befindet, oder ob mich jemand in sein frameset eingebunden hat.

Was ich in der Theorie zu tun habe, ist klar. Steht ja als Anwendungsbeispiel in SelfHTML.
Nur das ich selbst framesets habe und daher nicht über top.frames.length gehen kann...

Daher wollte ich andere Eigenschaten von top überprüfen, z.B. top.document.title oder top.location.href.

Es führt aber alles zu folgender Fehlermeldung:
"access disallowed from scripts at
HTTP://www.fortunecity.de/hockenheim/mansell/148/ to documents at
another domain. "

Ich kann nichts davon abfragen, selbst ein einfaches alert(top.document.title) funktioniert nicht.

Wer ist für diese Zugriffsbeschränkung verantwortlich? Existiert sie bei jedem Browser? Kann dann Stefans Beispiel überhaupt funktionieren?

Bin gerade etwas ratlos...

Vielleicht hat ja jemand schon ähnliches erlebt und hat eine Tip für mich? Oder habe ich im Archiv etwas übersehen?

Im voraus besten Dank, tom

P.S.: Auf meiner Seite gibt's die Umleitung leider nicht zu sehen, da sie halt noch nicht läuft...
Hoffe aber, das Problem ist klargeworden...

  1. Hi!

    Ich kann nichts davon abfragen, selbst ein einfaches alert(top.document.title) funktioniert nicht.

    Wer ist für diese Zugriffsbeschränkung verantwortlich?

    Wenn man so will: Netscape. Es ist eine Sicherheits-Einschränkung, die schon bei den ersten JavaScript-Versionen von Netscape eingebaut wurde.

    Existiert sie bei jedem Browser?

    Sollte sie zumindest...

    Kann dann Stefans Beispiel überhaupt funktionieren?

    Wenn das Frameset auf demselben Server wie der Frame liegt schon.

    Vielleicht hat ja jemand schon ähnliches erlebt und hat eine Tip für mich?

    Die einfachste Methode: Im Frameset einen Namen angeben und self.name abfragen.
    Mein persönlicher Tip: Am besten gar keine JavaScript-Spielereien, da die in diesem Fall eh meist eine überflüssige Fehlerquelle sind und nicht bei jedem Browser funktionieren (ältere/alternative Browser, abgeschaltet), sondern einfach eine Fußzeile mit Link auf das "Haupt-Frameset".

    Oder habe ich im Archiv etwas übersehen?

    Bin jetzt zu faul zum Suchen... ;)
    Eigentlich müßte das drin sein, denke ich...

    Ciao,
    Mirko

    1. Hallo, Mirko!

      Danke für die Antwort!

      Kann dann Stefans Beispiel überhaupt funktionieren?

      Wenn das Frameset auf demselben Server wie der Frame liegt schon.

      Mhhh! Ist aber eigentlich der unwahrscheinlichste Fall, wenn man sich aus wirklich fremden Framesets befreien will...

      D.h. aber, daß man mit diesem Script in der Regel nur Fehlermeldungen und nicht das gewünschte Ergebnis erzielt?

      Dann geht es ja ein bißchen am Ziel vorbei...

      Vielleicht hat ja jemand schon ähnliches erlebt und hat eine Tip für mich?

      Die einfachste Methode: Im Frameset einen Namen angeben und self.name abfragen.

      Verstehe ich jetzt nicht ganz. Wenn ich meine frameinhalte schützen will, kann ich mich ja auf das direkt übergeordnete frameset beziehen.

      Ein Problem ist eigentlich erst zuzuordnen, ob in der top-Ebene noch was Fremdes steht, das meine ganze Seite incl. frames untergeordnet aufruft....

      Mein persönlicher Tip: Am besten gar keine JavaScript-Spielereien, da die in diesem Fall eh meist eine überflüssige Fehlerquelle sind und nicht bei jedem Browser funktionieren (ältere/alternative Browser, abgeschaltet), sondern einfach eine Fußzeile mit Link auf das "Haupt-Frameset".

      Sehe ich etwas anders. Bei mir fängt die Hemmschwelle erst darüber an. Ich denke, JavaScript wird immer mehr zum Standard...
      Außerdem sind meine Seiten ohne JavaScript eh nicht funktionsfähig...

      Viele Grüße, tom

  2. Hallo Tom!

    Ich wollte eine URL-Weiterleitung auf einem fremden Server aktivieren, die auf Basis eines "100%,*"-Framesets arbeitet. Meine Seite würde also in einen den ganzen Bildschirm füllenden frame geladen werden

    Nun wollte ich kontrollieren, ob die übergeordnete Seite sich im top-frame befindet, oder ob mich jemand in sein frameset eingebunden hat.

    Was ich in der Theorie zu tun habe, ist klar. Steht ja als Anwendungsbeispiel in SelfHTML.
    Nur das ich selbst framesets habe und daher nicht über top.frames.length gehen kann...

    Probier mal:

    if (self.name == 'NAME DEINES ANZEIGENDEN FRAMEFENSTERS')
       { ;}
    else { if (self != top)
      top.location.href = self.location;}

    Funzt bei mir einwandfrei!!! (auch wenn JS-Puristen sich angesichts der "Nichts"-Funktion:{ ;} die Haare raufen!

    Bis danndann

    PAF [if (self.name == 'patrick') document.write('ausfranfkurt');]

    1. RE Hallo Tom!

      if (self.name == 'NAME DEINES ANZEIGENDEN FRAMEFENSTERS')
         { ;}
      else { if (self != top)
        top.location.href = self.location;}

      Sorry!

      top.location.href = self.location bewirkt, daß die entsprechende Seite standalone aufgerufen wird...

      hier mußt Du natürlich den Name Deines Framessets geben:

      top.location.href= 'framesdatei.htm'

      Bis danndann

      PAF (patrickaustop.location.href='frankfurt')

      1. Auch Dir danke, Patrick!

        Leider hake ich noch etwas bei dem Konstrukt.
        Wenn self einen Namen hat, muß es doch zwangsläufig in einem frameset sein, oder?
        Wenn es dann standalone sein soll, brauch ich doch gar nicht mehr weiterfragen...

        Oder nein, Du hast bestimmt ein zweites Browserfenster aufgemacht...
        Jetzt hab ich's, da versteh ich dann auch den Sinn der doppelten Abfrage.

        Wirklich wichtig ist die Sache mit dem self==top. Die scheint nämlich auch erlaubt zu sein, wenn top auf einer anderen Domain liegt.

        Hatte ich auch gerade rausgefunden. Wollte gerade was dazu schreiben...

        Naja, damit experimentiere ich jetzt ein bißchen...

        viele grüße, tom

        1. Hi!

          Leider hake ich noch etwas bei dem Konstrukt.
          Wenn self einen Namen hat, muß es doch zwangsläufig in einem frameset sein, oder?

          Ja.

          Wenn es dann standalone sein soll, brauch ich doch gar nicht mehr weiterfragen...

          Naja, du könntest auf != "" abfragen, aber self!=top bringt mehr...

          Oder nein, Du hast bestimmt ein zweites Browserfenster aufgemacht...

          Damit hat das eigentlich nichts zu tun...

          Jetzt hab ich's, da versteh ich dann auch den Sinn der doppelten Abfrage.

          Wirklich wichtig ist die Sache mit dem self==top. Die scheint nämlich auch erlaubt zu sein, wenn top auf einer anderen Domain liegt.

          So isses.
          Und PAF hatte bereits mit seinem ersten Posting recht: Denn der self!=top-Vergleich sollte im Frameset stehen (hilft gegen Gefangenschaft in fremden Framesets), und damit ist self.location der Name des Framesets!

          Die self.name-Abfrage macht in den Frames selbst Sinn, denn hier bewirkt sie, daß die Frames wieder in ihr Frameset kommen, statt alleine oder in einem fremden Frameset angezeigt zu werden (Suchmaschinen-Problem). (Der Fall "Frameset komplett in fremden Frameset" ist ja mit dem self!=top im Frameset schon erledigt).

          Ciao,
          Mirko

        2. Hallo Tom!

          Mirko hat Dir bereits einiges Erklärendes geschrieben.

          Ich möchte dennoch die Funktion für Dich (und andere) ausführlicher erläutern:

          if (self.name == 'NAME DEINES ANZEIGENDEN FRAMEFENSTERS')
             { ;}
          else { if (self != top)
            top.location.href = self.location;}

          Was bewirkt denn das alles?

          In Deinem Frameset hast sicherliche einen Hauptframe, in welchem die Dateien, die es von eventuellen, fremden Framsets zu befreien geht, angezeigt werden. Diesen Frame hast Du hoffentlich (wie es sich gehört, wenn man JS einsetzen will) einen Namen gegeben. Nehmen wir an, der Anzeigeframe heißt "text", OK?

          if (self.name == 'text)
             { ;}

          Mit dieser Abfrage, die in die in Frage kommenden Dateien gehört, checkst Du, ob die Datei bereits in einem Frame namens "text", also Deinem Anzeigeframe (oder Haupftframe), geladen worden ist. Ist dies der Fall, passiert nichts: Du willst ja Deinen eigenen Frameset nicht killen, oder?

          else { if (self != top)
            top.location.href = self.location;}

          Nun checkst Du, ob die Datei in einem anderen Frameset geladen ist: "else {if (self!=top)" und wenn das der Fall ist, wird die Datei mit diesem Beispiel standalone aufgerufen.

          Willst du anstelle dessen, dass die Datei in Deinem Frameset aufgeht, mußt Du hier den entsprechenden Namen angeben:

          top.location.href ='meineframesdatei.html'

          Da wird das Frameset allerdings mit der Startseite, die Du definiert hast, geladen.

          mit

          self.location.href= 'meineframesdatei.html?losedatei.html'

          müßte es dann gehen, bin mir aber nicht ganz sicher. Vielleicht kann mir hier jemand berichtigen. Außerdem funzt sowas beim IE nur in einer HTTP-Umgebung, also nur online.

          Bis danndann

          PAF (patrickaus?frankfurt)

          Leider hake ich noch etwas bei dem Konstrukt.
          Wenn self einen Namen hat, muß es doch zwangsläufig in einem frameset sein, oder?
          Wenn es dann standalone sein soll, brauch ich doch gar nicht mehr weiterfragen...

          Oder nein, Du hast bestimmt ein zweites Browserfenster aufgemacht...
          Jetzt hab ich's, da versteh ich dann auch den Sinn der doppelten Abfrage.

          Wirklich wichtig ist die Sache mit dem self==top. Die scheint nämlich auch erlaubt zu sein, wenn top auf einer anderen Domain liegt.

          Hatte ich auch gerade rausgefunden. Wollte gerade was dazu schreiben...

          Naja, damit experimentiere ich jetzt ein bißchen...

          viele grüße, tom

          1. Ich danke Euch beiden für die Erläuterungen!

            Jetzt ist mir ungefähr klar, unter welchen Rahmenbedingungen was passieren sollte.

            Ich hatte Deinen Text als Abfrage in der framesetdefinition verstanden, und da war er mir natürlich nicht ganz einleuchtend...

            Aber jetzt sind alle Unklarheiten beseitigt. Bin im Hintergrund schon eifrig am basteln...

            Viele Grüße, tom