Andreas L.: Zugriff auf top.frames[0].name verweigert

Hallo!

Ich habe das Problem, dass meine Seite derzeit (gewollt oder ungewollt) in einem Frame einer anderen Seite "gewebnappt" wird. Dieses möchte ich natürlich vermeiden.

Da meine Domain aber nur eine Weiterleitung auf meine T-Online Webadresse ist, funktioniert das mit dem if self.location!=top.location nicht so einfach, da ich im Normalfall den Weiterleitungsframe mit dem Domainnamen in der Adresszeile nicht zerstören möchte.

Nun habe ich mir überlegt, dass ich "einfach" den Namen mit top.frames[0].name auslese. Wenn dieser nicht der des Weiterleitungsframes ist, und nicht mein eigener (falls mal jemand direkt über die TOL Seite rein geht), dann soll er die Seite mit top.location.href="index.htm" nachladen.

Das Problem ist nur, dass das Javascript bei der Seite, die meine Seite in Ihrem Frame darstellt, mit der Fehlermeldung abbricht, das der Zugriff auf window.name (also denke ich top.frames[0].name) verweigert wird.

Sicherlich könnte ich jetzt mit onError den Fehler abfangen, aber ich halte das dann nicht unbedingt für "sauber" programmiert. Daher die Fragen:

1.) Gibt es einen Weg abzufragen, ob ich einen zugriff auf top.frames[0].name habe, OHNE das mir das Javascript abbricht? Denn wenn ich keinen Zugriff darauf habe, bedeutet das ja auch, das die Seite in einem Frame dargestellt wird, und ich muss mit top.location.href="index.htm" nachladen.

2.) Gibt es vielleicht eine komplett andere Lösung hierfür?

Vielen Dank für die Hilfe!

Mfg.

Andreas

  1. Hi,

    Ich habe das Problem, dass meine Seite derzeit (gewollt oder ungewollt) in einem Frame einer anderen Seite "gewebnappt" wird. Dieses möchte ich natürlich vermeiden.

    wenn der Besitzer der fremden Site dies nicht auf Deine Bitte hin unterlässt, dann drohe ihm mit rechtlichen Schritten. Du bekämst in jedem Fall Recht.

    da ich im Normalfall den Weiterleitungsframe mit dem Domainnamen in der Adresszeile nicht zerstören möchte.

    Dir ist aber schon bewusst, dass ein Frameset schon allein _weil_ (zumeist) nicht die reelle URL angezeigt wird, eine Minderung der Qualität darstellt? Wenn es nur wegen des Domainnamens ist, ist das Unsinn.

    Das Problem ist nur, dass das Javascript bei der Seite, die meine Seite in Ihrem Frame darstellt, mit der Fehlermeldung abbricht, das der Zugriff auf window.name (also denke ich top.frames[0].name) verweigert wird.

    Korrekt, wegen der Same Origin Policy. Kommen befragtes und fragendes Dokument von unterschiedlichen Quellen (gemessen an Protokoll, Hostname und Port), wird der Zugriff verweigert. Es existiert kein Weg, dies zu vermeiden - und es existiert auch kein Weg, zwischen "Frameset des Bösewichts" und "Frameset Deiner Domain" zu unterscheiden.

    Sicherlich könnte ich jetzt mit onError den Fehler abfangen, aber ich halte das dann nicht unbedingt für "sauber" programmiert.

    Im Prinzip schon. Mit window.onerror kannst Du völlig legitim, korrekt und sauber aus einem Frameset ausbrechen.

    1.) Gibt es einen Weg abzufragen, ob ich einen zugriff auf top.frames[0].name habe, OHNE das mir das Javascript abbricht?

    Nein.

    2.) Gibt es vielleicht eine komplett andere Lösung hierfür?

    Ja. Verzichte auf das Domain-Frameset. Und sprich mit dem Webmaster der Fremdsite.

    Cheatah

    1. Hallo Cheatah!

      [...webnapping...]

      wenn der Besitzer der fremden Site dies nicht auf Deine Bitte hin unterlässt, dann drohe ihm mit rechtlichen Schritten. Du bekämst in jedem Fall Recht.

      Mit _dem_ würde ich das warscheinlich hinbekommen, da es bei ihm - meiner Meinung nach - nur Unwissenheit ist, dass man mit _blank einen Link in einer neuen Seite öffnen kann und sollte. Da mir das ja aber auch mit anderen Seiten passieren kann, benutze ich ihn im Moment als Testobjekt, um meine Seite dagegen zu sichern :-).

      da ich im Normalfall den Weiterleitungsframe mit dem Domainnamen in der Adresszeile nicht zerstören möchte.

      Dir ist aber schon bewusst, dass ein Frameset schon allein _weil_ (zumeist) nicht die reelle URL angezeigt wird, eine Minderung der Qualität darstellt? Wenn es nur wegen des Domainnamens ist, ist das Unsinn.

      Sicherlich ist es nicht die "sauberste" Methode. Für unsere Seite (www.aller-weser-skating.de) ist es aber derzeit die deutlich günstigste Lösung. Ich denke nicht, dass wir im Moment mehr brauchen.

      Welche "Minderung der Qualität" meinst Du den überhaupt, außer das man das nicht machen soll, weil es z.B. nicht "sauber" ist? Mir viele da noch ein, das man z.B. nicht direkt auf Unterkapitel (www.aller-weser-skating.de/aktuelles) zugreifen kann, ok, stimmt, kann ich aber derzeit darauf verzichten... Für so unsinnig halte ich es nicht, dass der Domain-Name in der Adresszeile enthalten bleibt. Macht einen besseren Eindruck :-).

      Korrekt, wegen der Same Origin Policy. Kommen befragtes und fragendes Dokument von unterschiedlichen Quellen (gemessen an Protokoll, Hostname und Port), wird der Zugriff verweigert. Es existiert kein Weg, dies zu vermeiden - und es existiert auch kein Weg, zwischen "Frameset des Bösewichts" und "Frameset Deiner Domain" zu unterscheiden.

      Danke, soweit bin ich in der Javascript-Programmierung noch nicht drin, dass ich das wußte. Das werde ich mir noch mal genauer anschauen.

      Sicherlich könnte ich jetzt mit onError den Fehler abfangen, aber ich halte das dann nicht unbedingt für "sauber" programmiert.

      Im Prinzip schon. Mit window.onerror kannst Du völlig legitim, korrekt und sauber aus einem Frameset ausbrechen.

      Na, dann werde ich das wohl so lösen.

      1.) Gibt es einen Weg abzufragen, ob ich einen zugriff auf top.frames[0].name habe, OHNE das mir das Javascript abbricht?

      Nein.

      Schade! Kann man wirklich nicht irgendwie abfragen: "Darf ich auf dem Top-Frame zugreifen, ohne das mein Script abbricht?" Muss ja nicht über top.frames[0].name gehen...

      Ich komme von der C++ Programmierung, und da würde ich es nicht gut finden, _bewußt_ eine Exception in Kauf zu nehmen, und diese dann z.B. mit try catch abzufangen. Mir wäre eine Lösung darf.ich.zugreifen!=true dann lade nach deutlich lieber.

      2.) Gibt es vielleicht eine komplett andere Lösung hierfür?

      Ja. Verzichte auf das Domain-Frameset. Und sprich mit dem Webmaster der Fremdsite.

      Ungern würde ich auf das Domain-Frameset verzichten, wenn es geht. Mit dem Webnapper spreche ich, sobald mein Script läuft :-)

      Cheatah

      Vielen Dank für Deine Hilfe!

      Andreas

      1. Hi,

        wenn der Besitzer der fremden Site dies nicht auf Deine Bitte hin unterlässt, dann drohe ihm mit rechtlichen Schritten. Du bekämst in jedem Fall Recht.

        Mit _dem_ würde ich das warscheinlich hinbekommen, da es bei ihm - meiner Meinung nach - nur Unwissenheit ist, dass man mit _blank einen Link in einer neuen Seite öffnen kann und sollte.

        man sollte _top nehmen, wenn man schon unbedingt seine Seite mit Frames verschandeln muss.

        Da mir das ja aber auch mit anderen Seiten passieren kann, benutze ich ihn im Moment als Testobjekt, um meine Seite dagegen zu sichern :-).

        Ach so :-) Nun, mein Rat ist auch beim nächsten Mal wieder der gleiche. Daher erübrigt sich ein solches Testen eigentlich...

        Dir ist aber schon bewusst, dass ein Frameset schon allein _weil_ (zumeist) nicht die reelle URL angezeigt wird, eine Minderung der Qualität darstellt? Wenn es nur wegen des Domainnamens ist, ist das Unsinn.

        Sicherlich ist es nicht die "sauberste" Methode. Für unsere Seite (www.aller-weser-skating.de) ist es aber derzeit die deutlich günstigste Lösung. Ich denke nicht, dass wir im Moment mehr brauchen.

        Es hat nur nebenher mit "sauber" zu tun. Vor allem aber leidet der Benutzer darunter, weil er z.B. nicht mehr wie gewohnt Bookmarks setzen kann. Die Archiv-Suche ist voll von Diskursen über die Nachteile von Framesets, dort wirst Du sicher fündig.

        Sicherlich könnte ich jetzt mit onError den Fehler abfangen, aber ich halte das dann nicht unbedingt für "sauber" programmiert.
        Im Prinzip schon. Mit window.onerror kannst Du völlig legitim, korrekt und sauber aus einem Frameset ausbrechen.
        Na, dann werde ich das wohl so lösen.

        Damit brichst Du dann (glücklicherweise) auch aus dem Domain-Frameset aus :-)

        Schade! Kann man wirklich nicht irgendwie abfragen: "Darf ich auf dem Top-Frame zugreifen, ohne das mein Script abbricht?" Muss ja nicht über top.frames[0].name gehen...

        Du kannst fragen, ob es etwas gibt. Wenn Du fragen willst, ob etwas erlaubt ist, musst Du es tun - und hast dann _durch_ den Test bereits den Fehler. Die Wissenschaft hat das gleiche Problem: Allein die Untersuchung verfälscht das Ergebnis. Arme Quantenmechaniker... :-)

        Ich komme von der C++ Programmierung, und da würde ich es nicht gut finden, _bewußt_ eine Exception in Kauf zu nehmen, und diese dann z.B. mit try catch abzufangen. Mir wäre eine Lösung darf.ich.zugreifen!=true dann lade nach deutlich lieber.

        Auch JavaScript kennt Exceptions. Das bringt Dich aber nicht wesentlich weiter als window.onerror, da Du nicht zwischen den Ursachen "fremdes Frameset" und "Domain-Frameset" unterscheiden kannst: Hierfür müsste eben diese Aktion _erlaubt_ sein, sonst wäre die Exception hinfällig, wenn Du es trotzdem erfahren kannst.

        Ja. Verzichte auf das Domain-Frameset. Und sprich mit dem Webmaster der Fremdsite.
        Ungern würde ich auf das Domain-Frameset verzichten,

        Sei ganz ehrlich: Das Frameset ist Dir egal. Du willst den Domainnamen. Und der wird in der URL-Zeile - neben dem Localpart etc. - stehen, wenn Du zur Domain mehr Webspace buchst als nur eine index.html mit Frameset.

        Cheatah

        1. Hallo!

          Mit _dem_ würde ich das warscheinlich hinbekommen, da es bei ihm - meiner Meinung nach - nur Unwissenheit ist, dass man mit _blank einen Link in einer neuen Seite öffnen kann und sollte.

          man sollte _top nehmen, wenn man schon unbedingt seine Seite mit Frames verschandeln muss.

          Ich meinte, ER müsste _blank nehmen, wenn er meine Seite verlinkt, damit diese in einem neuen Fenster geöffnet wird.

          Da mir das ja aber auch mit anderen Seiten passieren kann, benutze ich ihn im Moment als Testobjekt, um meine Seite dagegen zu sichern :-).

          Ach so :-) Nun, mein Rat ist auch beim nächsten Mal wieder der gleiche. Daher erübrigt sich ein solches Testen eigentlich...

          Du meinst kein Frameset zu verwenden :-).

          Es hat nur nebenher mit "sauber" zu tun. Vor allem aber leidet der Benutzer darunter, weil er z.B. nicht mehr wie gewohnt Bookmarks setzen kann. Die Archiv-Suche ist voll von Diskursen über die Nachteile von Framesets, dort wirst Du sicher fündig.

          Ich habe die Erfahrung gemacht (bin Systemadministrator), das viele User noch nicht einmal in der Lage sind ein Bookmark zu setzten :-).
          Nein, mal im Ernst: Es ist mir schon klar, dass das mit den Bookmarks so nicht mehr klappt, aber ansonsten werden ich mal im Archiv kramen.

          Langsam aber sicher überzeugst Du mich :-). Aber eine Domainname ala http://www.t-online.de/home/benutzername/bereich sieht IMO wirklich nicht gut aus.

          Sicherlich könnte ich jetzt mit onError den Fehler abfangen, aber ich halte das dann nicht unbedingt für "sauber" programmiert.
          Im Prinzip schon. Mit window.onerror kannst Du völlig legitim, korrekt und sauber aus einem Frameset ausbrechen.
          Na, dann werde ich das wohl so lösen.

          Damit brichst Du dann (glücklicherweise) auch aus dem Domain-Frameset aus :-)

          Das ist mir klar. Überhaupt breche ich zur Sicherheit grundsätzlich aus dem Frameset aus, wenn etwas nicht "stimmt" (z.B. nur eine Unterseite ohne passendes Frameset von z.B. über eine Suchmaschine geladen wird). Mir geht es nur darum, das derjenige, der normal über die Domain kommt, den Domainnamen oben behält. Zugegeben nur, weil es besser, okok: professioneller, aussieht. Zumindest für Otto-Normal-Surfer.

          Du kannst fragen, ob es etwas gibt. Wenn Du fragen willst, ob etwas erlaubt ist, musst Du es tun - und hast dann _durch_ den Test bereits den Fehler. Die Wissenschaft hat das gleiche Problem: Allein die Untersuchung verfälscht das Ergebnis. Arme Quantenmechaniker... :-)

          Ok. Verstanden. Schade. In C++ würde ich dann z.B. ein NULL oder sowas zurück bekommen, aber keine Execption. Javascript ist halt nicht C...

          Ja. Verzichte auf das Domain-Frameset. Und sprich mit dem Webmaster der Fremdsite.
          Ungern würde ich auf das Domain-Frameset verzichten,

          Sei ganz ehrlich: Das Frameset ist Dir egal. Du willst den Domainnamen. Und der wird in der URL-Zeile - neben dem Localpart etc. - stehen, wenn Du zur Domain mehr Webspace buchst als nur eine index.html mit Frameset.

          Na klar will ich den Domain-Namen statt der langen URL. Das ist das Ziel. Aber eine Seite mit Webspace lohnt zur Zeit wirklich nicht. Und da sind 0,29 EUR/Monat für eine reine Weiterleitung ohne Werbung echt günstig.

          Aber langsam fange ich an zu grübeln, ob ich das ganze vielleicht doch lasse. Mal sehen...

          Cheatah

          Andreas

          1. Hi,

            man sollte _top nehmen, wenn man schon unbedingt seine Seite mit Frames verschandeln muss.
            Ich meinte, ER müsste _blank nehmen, wenn er meine Seite verlinkt, damit diese in einem neuen Fenster geöffnet wird.

            ja. Und ich meinte, er solle _top nehmen, um dem User keine Fenster aufzuzwingen, die dieser gar nicht will. _blank saugt.

            Ach so :-) Nun, mein Rat ist auch beim nächsten Mal wieder der gleiche. Daher erübrigt sich ein solches Testen eigentlich...
            Du meinst kein Frameset zu verwenden :-).

            Genau :-)

            Es hat nur nebenher mit "sauber" zu tun. Vor allem aber leidet der Benutzer darunter, weil er z.B. nicht mehr wie gewohnt Bookmarks setzen kann. Die Archiv-Suche ist voll von Diskursen über die Nachteile von Framesets, dort wirst Du sicher fündig.
            Ich habe die Erfahrung gemacht (bin Systemadministrator), das viele User noch nicht einmal in der Lage sind ein Bookmark zu setzten :-).

            Das liegt daran, dass diese User sich oft instinktiv auf Sites bewegen, die mit Frames arbeiten ;-) SCNR

            Nein, mal im Ernst: Es ist mir schon klar, dass das mit den Bookmarks so nicht mehr klappt, aber ansonsten werden ich mal im Archiv kramen.

            Bookmarks sind nur _ein_ Beispiel.

            Langsam aber sicher überzeugst Du mich :-). Aber eine Domainname ala http://www.t-online.de/home/benutzername/bereich sieht IMO wirklich nicht gut aus.

            Niemand zwingt Dich, die Seiten bei T-Online zu hosten.

            Das ist mir klar. Überhaupt breche ich zur Sicherheit grundsätzlich aus dem Frameset aus, wenn etwas nicht "stimmt" (z.B. nur eine Unterseite ohne passendes Frameset von z.B. über eine Suchmaschine geladen wird). Mir geht es nur darum, das derjenige, der normal über die Domain kommt, den Domainnamen oben behält.

            Die letzten beiden Sätze beißen sich: Es existiert kein Unterschied zwischen der Domain und einer _anderen_ fremden Site. Beide stammen von einem anderen Host als die Seiten, die die Prüfung vornehmen; in beiden Fällen also "stimmt etwas nicht". Abgesehen davon: _Nur_ der Domainname ist kein Vorteil gegenüber irgend etwas, das Du als nachteilig ansieht. Der Domainname mit Localpart, sprich: die _korrekte_ URL innerhalb der Domain ist es, was angezeigt werden sollte. Wenn das nicht geht (weil eine solche URL nicht existiert), ist _nur_ der Domainname die schlechtere der möglichen Alternativen.

            Zugegeben nur, weil es besser, okok: professioneller, aussieht. Zumindest für Otto-Normal-Surfer.

            Nur zum Schein.

            Na klar will ich den Domain-Namen statt der langen URL. Das ist das Ziel. Aber eine Seite mit Webspace lohnt zur Zeit wirklich nicht. Und da sind 0,29 EUR/Monat für eine reine Weiterleitung ohne Werbung echt günstig.

            Du gibst bereits mehr Geld aus, wenn Du in einem Lokal einen Kaffee trinkst - selbst beim Trinkgeld. Wenn es Dir um wenige Cent im Monat geht, solltest Du nicht versuchen, eine künstliche Professionalität zu erzeugen, die Du gar nicht zu bieten hast. Sorry für die harten Worte, aber _das_ ist wirklich knauserig.

            Aber langsam fange ich an zu grübeln, ob ich das ganze vielleicht doch lasse. Mal sehen...

            Nimm 'nen vernünftigen Provider, der Deinen Wünschen entspricht. Erfahrungsgemäß sind das _nicht_ die Massenprovider wie Puretec und Co., sondern eher jene, deren Kundenzahl sich auf vielleicht einige hundert beschränkt. Die kosten vielleicht ein paar Euro mehr im Monat, aber diese Kosten erhälst Du auch als Leistung zurück - in Formu von Support und Wunschumsetzung.

            Cheatah

            1. Hallo!

              ja. Und ich meinte, er solle _top nehmen, um dem User keine Fenster aufzuzwingen, die dieser gar nicht will. _blank saugt.

              Hmmmm.... Achso! Habe ich noch garnicht so darüber nachgedacht. Ich persönlich öffne Links fast immer in einem neuem Fenster (sprich Tab bei Opera und Mozilla). Ist es so, das es richtiger ist, diese in dem Fenter mit _top zu öffnen? Wenn ich so darüber nachdenke, hat dann der Benutzer bei _top immer noch die wahl, ob er ein eigenes Fenster öffnen will. Danke für den Hinweis, das werde ich vielleicht noch bei meinen externen Links ändern!

              Es hat nur nebenher mit "sauber" zu tun. Vor allem aber leidet der Benutzer darunter, weil er z.B. nicht mehr wie gewohnt Bookmarks setzen kann. Die Archiv-Suche ist voll von Diskursen über die Nachteile von Framesets, dort wirst Du sicher fündig.
              Ich habe die Erfahrung gemacht (bin Systemadministrator), das viele User noch nicht einmal in der Lage sind ein Bookmark zu setzten :-).

              Das liegt daran, dass diese User sich oft instinktiv auf Sites bewegen, die mit Frames arbeiten ;-) SCNR

              Bestimmt, ist schon eine ungerechte Welt :-)).

              Langsam aber sicher überzeugst Du mich :-). Aber eine Domainname ala http://www.t-online.de/home/benutzername/bereich sieht IMO wirklich nicht gut aus.

              Niemand zwingt Dich, die Seiten bei T-Online zu hosten.

              Jaja, schon gut... ;-)

              Das ist mir klar. Überhaupt breche ich zur Sicherheit grundsätzlich aus dem Frameset aus, wenn etwas nicht "stimmt" (z.B. nur eine Unterseite ohne passendes Frameset von z.B. über eine Suchmaschine geladen wird). Mir geht es nur darum, das derjenige, der normal über die Domain kommt, den Domainnamen oben behält.

              Zugegeben nur, weil es besser, okok: professioneller, aussieht. Zumindest für Otto-Normal-Surfer.

              Nur zum Schein.

              Richtig.

              Na klar will ich den Domain-Namen statt der langen URL. Das ist das Ziel. Aber eine Seite mit Webspace lohnt zur Zeit wirklich nicht. Und da sind 0,29 EUR/Monat für eine reine Weiterleitung ohne Werbung echt günstig.

              Du gibst bereits mehr Geld aus, wenn Du in einem Lokal einen Kaffee trinkst - selbst beim Trinkgeld. Wenn es Dir um wenige Cent im Monat geht, solltest Du nicht versuchen, eine künstliche Professionalität zu erzeugen, die Du gar nicht zu bieten hast. Sorry für die harten Worte, aber _das_ ist wirklich knauserig.

              So bin ich nunmal, immer am sparen :-). Nein, ernsthaft. Sollte sich mehr daraus entwickeln, werde ich natürlich eine richtige Domain mit Speicher nehmen.

              Aber langsam fange ich an zu grübeln, ob ich das ganze vielleicht doch lasse. Mal sehen...

              Nimm 'nen vernünftigen Provider, der Deinen Wünschen entspricht. Erfahrungsgemäß sind das _nicht_ die Massenprovider wie Puretec und Co., sondern eher jene, deren Kundenzahl sich auf vielleicht einige hundert beschränkt. Die kosten vielleicht ein paar Euro mehr im Monat, aber diese Kosten erhälst Du auch als Leistung zurück - in Formu von Support und Wunschumsetzung.

              Das lohnt sich IMHO aber nur, wenn ich weitere Features brauche, ala CGI, ... Nur wegen des Domainnamens IMHO nicht.

              Andreas