Wolfgang See: frameset erzwingen - kein fremdframe

Hallo,
ich habe im web schon viel zum Thema JavaScript recherchiert:
Es gibt viele einfache Lösungen um das Erscheinen
einer Seite (ohne framset) in einem fremden Frameset zu verhindern.
Ebenso gibt es viele einfache Lösungen um ein Frameset
zu erzwingen (Suchmaschinenproblemn)
Aber:
Ich will beides.
Ich moechte schließlich auch nicht, dass eine Seite meines Framesets
in einem Fremd-Frameset erscheint.
Dazu muß ich das möglicherweise fremde Frameset abfragen.
Und das scheint nicht zu gehen (error).
Wie mache ich das?
oder besser:
Wo finde ich ein schon fertiges Script dafür?
Das ist doch kein neues Problem.
Idealerweise sollte dann auch mein Frameset mit der
richtigen Seite angezeigt werden.
Dazu habe ich nur einen toten link im Archiv dieses Forums gefunden.
Vielen Dank im voraus für Eure Hilfe
Gruß
Wolfgang

  1. Hallo Wolfgang!

    Fuer die Befreiung von fremden Frames kannst Du auf meine Loesung auf Atomic Eggs zurueckgreifen:

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

    Also: wenn der Name des Framefensters "pajst" heisst passiert nichts, ansonsten wird die Seite standalone geladen. Hier (im else-Zweig) kannst Du Dein Frameset laden lassen.

    Warum so komische Framename (pajst)??? Ganz einfach: die Meisten nennen Ihre Framesfenster doch "haupt" oder "main" oder so in der Art. Wenn ich selbst mein Framefenster so nenne, kann es passieren, dass eben nichts passiert, falls die Seite in einem fremdes Fenster gleichen Namens angezeigt wird ;-)

    Patrick

    1. Hallo Patrick

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

      warum nicht gleich

      if (self.name != 'pajst')
          { if (self != top)
            top.location.href = self.location;}

      ?

      grüße
      axel

      1. Hallo Axel!

        warum nicht gleich

        if (self.name != 'pajst')
            { if (self != top)
              top.location.href = self.location;}

        Auch gut!
        Das haettest Du mir vor 2 Jahren sagen sollen, als ich am Grundgeruest der Site baute... ;-)

        Bis dann
        Patrick

  2. Hallo Wolfgang,

    Ich will beides.
    Ich moechte schließlich auch nicht, dass eine Seite meines Framesets
    in einem Fremd-Frameset erscheint.
    Dazu muß ich das möglicherweise fremde Frameset abfragen.
    Und das scheint nicht zu gehen (error).
    Wie mache ich das?
    oder besser:
    Wo finde ich ein schon fertiges Script dafür?
    Das ist doch kein neues Problem.

    was ganz fertiges schreib ich Dir nicht, aber ...
    ich empfehle Dir folgendes Vorgehen:

    benenne Dein (top)framesetfebster mit einem eigenen (ungewöhnlichen) Namen,
    z.Bsp in frameset-def per javascript im <head>Teil mit self.name = 'mein-topname'

    dann frägst Du in Deinen relevanten Unterseiten per js:

    if(top.name!='mein-topname' || top.frames.length != anzahl-meiner-frames)
       top.location.href = "http://www.meine.seite.de?window.location.href

    Idealerweise sollte dann auch mein Frameset mit der
    richtigen Seite angezeigt werden.

    ... dazu sollte Dir anschliessend dieser Link weiterhelfen:

    http://www.teamone.de/selfaktuell/artikel/javascript/dyn-frames/index.htm

    das bietet zwar keine 100% Sicherheit, genügt jedoch in den meisten Fällen!

    Viele Grüße Günter

    1. Hallo Günter, hallo Ihr anderen Helfer,

      mit dem von Dir Günter empfohlenen Script:
      http://www.teamone.de/selfaktuell/artikel/javascript/dyn-frames/index.htm

      (ich hatte zuerst darauf einen toten link)
      und dem einfachen
      Anwendungsbeispiel in SELFHTML:
      http://www.teamone.de/selfhtml/tedb.htm
      (ins Frameset eingebaut)
      hab ich nun alles so, wie ich es wollte.
      --- Und es funktioniert ---
      Das muß nicht 100%ig sicher sein, aber so sind für mich
      die Hauptprobleme dieser Art gelöst.
      Nochmals Vielen Dank an alle
      (Ich hab mit alle antworten gesichert und werde sie
      mir noch einmal unter's Kopfkissen legen)
      und
      Gruß
      Wolfgang

  3. Hallo Wolfgang

    Ich verstehe dich so dass du ne fälschungssichere
    Möglichkeit suchst um zu wissen dass das Frameset
    von deinem Host kommt! window.name ist leider nicht sicher!

    Dazu muß ich das möglicherweise fremde Frameset abfragen.
    Und das scheint nicht zu gehen (error).

    Der Fehler tritt nur auf wenns von einem fremden Host kommt,
    sprich dein Frame wird gerippt. Und genau diesen
    Nachteil köntest du zu deinem Vorteil nutzen:

    Ansatz 1. Unter IE kannste Fehler mit try/catch abfangen.

    Ansatz 2. Mit (ungetestet)
    timeout=window.setTimeout("top.location.href=MeinFrameSet",1000)
    könntest du erzwingen, dass dein Frameset in einer Sekunde geladen wird

    Wenn deine Abfrage von Top erfolgreich ist kannste mit
    window.clearTimeout(timeout)
    die unnötige Umleitung wieder canceln.

    Leider weiß ich nicht ob im Errorfall auch die Timeouts gecancelt
    werden, falls ja mußt du Abfrage und setTimeout auf verschiedenen
    Frames legen.

    Hoffe das klappt so

    Viele Grüße
    Rolf