Patrick: Und, Oder und/oder was anderes???

Hallo Forumer!

Ich habe meine halbe (Arbeits-)Nacht damit verbracht, einen Framekiller zu entwickeln, der alle, nur nicht meine zwei eigenen möglichen Framsets killt. Am Ende weiß ich nicht mehr was und (&&) und was oder() ist, oder? Und am Ende ist IF nur noch ein Inselschloß, wo der Graf von Montechristo, glaube ich, seine Rachepläne schmiedete...

Also, die Vorgeschichte ist folgende:

datei "X" wird je nach dem vom User gewählten Modus ins Hauptfenster des  Framesets "idxfloat.htm" geladen oder ins Hauptfenster des anderen Framesets "idxstart.html". Sollte ein "Quereinsteiger" von einer Suchmaschine auf Datei "X" stoßen, soll sie standalone aufgerufen werden, aber nicht innerhalb eines anderen, fremdem Framesets verkümmern.

Soweit so gut!

mit folgendem Code habe ich einen stinknormalen Framekiller:

<script language="JavaScript">
if(top.frames.length > 0)
  top.location.href=self.location;
</script>

Wie verbinde ich aber die Abfrage, damit nur dann das Frameset gekillt, wenn es sich nicht gerade um "idxfloat" oder "idxstart" handelt...???

Ich habe versucht mit:

if ((top.frames.length >0) && (parent.frames.name != 'idxfloat.htm'))
top.location.href=self.location;

und mit anstelle von && , und mit verschachtelten Abfragen versucht... ohne Erfolg: entweder gibt es eine Endlos(lade)schleife, oder es passiert nichts, oder meine eigenen Framesets werden auch gekillt.....

If und oder am Ende eine(r) nen Lösungsansatz für mich hat???

Bis danndann

PAF (patrickausfrankfurt)

  1. Hallo Patrick

    Ich habe meine halbe (Arbeits-)Nacht damit verbracht, einen Framekiller zu entwickeln, der alle, nur nicht meine zwei eigenen möglichen Framsets killt. Am Ende weiß ich nicht mehr was und (&&) und was oder() ist, oder? Und am Ende ist IF nur noch ein Inselschloß, wo der Graf von Montechristo, glaube ich, seine Rachepläne schmiedete...

    Bevor es so weit kommt und dich am Ende der Freiherr holt, weil du die geschuetzten Begriffe "und" &&/ "oder" zu in kommerzieller Absicht (nachts bei der Arbeit) verwendet hast, stellen wir klar:

    && bedeutet: beide Bedingungen muessen wahr sein, sonst passiert nichts.

    bedeutet: eine der beiden Bedingungen muss wahr sein, dann passiert es. Nur wenn keine der beiden Bedingungen wahr ist, passiert nichts.

    Ich habe versucht mit:

    if ((top.frames.length >0) && (parent.frames.name != 'idxfloat.htm'))
    top.location.href=self.location;

    Kann es sein, dass da ein kleiner Bug drin ist?
    parent.frames.name?
    Nicht besser:
    parent.NameDeinesFrames.name
    Oder:
    parent.frames[1].name

    Denn mit parent.frames. sprichst du nur das Objekt als solches an, nicht einen bestimmten Frame. Und da unbekannte Eigenschaften meist keinen Error erzeugen, laesst er dir frames.name zwar durchgehen, aber da ist nichts dahinter.

    viele Gruesse
      Stefan Muenz

    1. Hallo Stefan!

      Bevor es so weit kommt und dich am Ende der Freiherr holt,

      Da fällt mir ein, ich hatte mal die Idee in den Meta-Tags einiger meiner Seiten öfters die Wörter "Explorer", "FTP-Explorer", oder "WebSpace" einzutragen. Diese kommen ansonsten nicht vor und es gibt keine Links. Der Freiherr dürfte mich aber jedesmal in der Liste haben, wenn er in einer Suchmaschine danach sucht!

      && bedeutet: beide Bedingungen muessen wahr sein, sonst passiert nichts.

      bedeutet: eine der beiden Bedingungen muss wahr sein, dann passiert es. Nur wenn keine der beiden Bedingungen wahr ist, passiert nichts.

      Das war so weit klar. Aber das hier:

      parent.frames.name?
      Nicht besser:
      parent.NameDeinesFrames.name
      Oder:
      parent.frames[1].name

      Denn mit parent.frames. sprichst du nur das Objekt als solches an, nicht einen bestimmten Frame.

      wundert mich ein bißchen, denn so (und nach meinem JS-Kenntnisstand im Moment nur so) wie weiter unten geschildert, klappt letztendlich die Sache.

      Gewünscht war folgendes: wenn die Datei "X" sich bereits im Frameset idxsart.html oder idxfloat.htm (beide Framessets sind die von mir umbenannten index.htm (Frames-Mode) und index2.htm (Floating Mode) des neuen Joust Outliners: http://www.alchemy-computing.co.uk/joust/) befindet, soll sie da bleiben; wenn sie innerhalb eines anderen Framesets steht, soll sie sich davon befreien und "standalone" aufgerufen werden, und wenn sie bereits standalone geladen wurde, soll sie es auch bleiben.

      Und dies erreichte ich letzendlich so:

      <script language="JavaScript">

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

      </script>

      wobei "text" der Name des Anzeigeframes beider Framesets ist.

      Wenn ich im obersten If-Zweig etwas anderes angebe, zum Beispiel "text.name" oder "parent.text.name", kommt es zur Meldung, daß dies kein Objekt war.

      Wenn ich "parent.frames.name == 'text'" angebe passiert bei "idxfloat" nix, aber "idxstart" wird zerschossen.

      Vielleicht sträuben sich bei JS-puristen angesichts der "nichts"-Funktion die Haare, aber auch void(); oder void oder void; brachte nichts!

      Mir kann's egal sein, ich freue mich, daß es nach langem Herumprobieren nun funzt!

      Und wozu das Ganze? Es wird der neue Look von Atomic Eggs! Dauert aber noch ein bisschen!

      Bis danndann

      PAF { ; }