Marko: Frage zu "Datei dynamisch in Frameset laden"

Hallo an alle,

Nach ewigem Suchen hab ich nun endlich ein Script gefunden, daß das Laden einer einzelnen Seite eines Framesets verhindert (http://www.teamone.de/selfaktuell/artikel/jsframes.htm).

Neugierig wie ich bin (und weil ich von Javascript nun mal null Ahnung habe), habe ich mir das Script auf http://www.morshausen.de/news/news.htm "in Action" angesehen.

Dort steht nun zusätzlich folgende Zeile:
else parent.oben.ShowBanner("../");

Als Javascript-Laie hab ich mir über die Funktion der Zeile nur soviel zusammenreimen können, daß sie beim Klick auf "abbrechen" einen Frame namens "oben" lädt.

Was muß ich ändern, wenn bei mir dann wenigstens der Navigationsframe (Name: "Inhalt") mitangezeigt werden soll ?

Danke im Vorraus

  1. Hi!

    Als Javascript-Laie hab ich mir über die Funktion der Zeile nur soviel zusammenreimen können, daß sie beim Klick auf "abbrechen" einen Frame namens "oben" lädt.

    Das hast du falsch verstanden.

    In der IF-Abfrage wird abgefragt, ob es ein Frame namens oben gibt - gibt es dieses nicht, so erscheint eine Alert-Box und der Besucher wird gefragt, ob er auf die Hauptseite wechseln will. (Bei Antwort "OK" wird in das Frameset gewechselt, bei Antwort "abbrechen" wird gar nichts gemacht)

    Der ELSE-Teil der Abfrage wird nur ausgeführt, wenn es das Frame "oben" gibt - und dann wird eine Funktione namens ShowBanner (die sich auf der Seite im Frame "oben" befindet) aufgerufen - das hat allerdings nichts mit der Weiterleitung in ein Frameset zu tun.

    mfG
    brand

  2. Hallo Marko

    Neugierig wie ich bin (und weil ich von Javascript nun mal null Ahnung habe), habe ich mir das Script auf http://www.morshausen.de/news/news.htm "in Action" angesehen.

    Der Typ, der das geschrieben hat, ist anscheinend ein richtiges Koordinationsgenie. Bei diesem Code hätt ich schon lange keine Haare mehr auf den Kopf. Er jongliert da Variablen auf wildesten Pfaden durch seine kleine Seite.

    Ich hoffe, dass ich dir erklären kann, was er gemacht hat:

    In der Datei news.htm überprüft er mit

    // if(!parent.oben)

    .. wie schon gesagt, ob es ein parent-fenster gibt, das den Namen "oben" hat. Wenn diese if-Anweisung true !! zurückgibt heisst das es gibt kein "oben", und fragt den user ob er ins frameset wechseln will.

    Das Rufzeichen steht für "Es existiert !kein! ..."

    Dort steht nun zusätzlich folgende Zeile:

    »»  else parent.oben.ShowBanner("../");

    Wenn if false zurückliefert (=> d.h.: es !existiert! ein Frame mit dem Namen "oben"), und er ruft die Funktion Showbanner() in der Datei, die sich im Frame namens "oben" (=oben.htm) befindet, auf.

    In der Datei oben.htm findest du dann die Funktion. Der Parameter ("../") wird nur übergeben, weil seine Banner-gifs einem anderen  Verzeichnis liegen als oben.htm

    Als Javascript-Laie hab ich mir über die Funktion der Zeile nur soviel zusammenreimen können, daß sie beim Klick auf "abbrechen" einen Frame namens "oben" lädt.

    FALSCH:
    Jetzt überleg dir mal was passiert, wenn die Funktion showBanner('../') aufgerufen wird:

    // function ShowBanner(prefix) {
    //  var d=parent.frames['Rechts'].document;
    //  switch(Math.ceil(Math.random()*8))
    //  {
    //   case 1: d.write("<a href='http://...>
    //     <img src='" + prefix + "banner/b2.gif' border=0></a>");break;
    //   case 2: d.write("<a href='' .... >
    //     <img src='" + prefix + "banner/b1.gif' border=0></a>");break;
    //
    //   ... usw.
    // }

    aktuelles Verzeichnis, von dem aus die Funktion aufgerufen wird:
    http://www.morshausen.de/news/news.htm

    => // <img src='" + prefix + "banner/b6.gif' border=0>

    Gif liegt in:
    http://www.morshausen.de/banner/b7.gif

    Is doch alles Klar oder ;-)

    Er braucht die Zeile mit else, da oben.htm nicht im selben Verzeichnis liegt wie news/news.htm! -Also echt, der Typ ist krank!

    Was muß ich ändern, wenn bei mir dann wenigstens der Navigationsframe (Name: "Inhalt") mitangezeigt werden soll ?

    Aber wie gesagt: Für deine Zwecke reicht es wenn du folgenden Code einbaust, und zwar in die Seite, die du schützen willst:

    // if(!parent.xyz) {
    //   var frame_wechseln = confirm('Ins Frameset wechseln?');
    //   if(frame_wechseln) {                          
    //       location.href="http://DeineDomain/NameDerFramesetDatei.html
    //   }
    // }

    oder ganz brutal:

    // if(!parent.xyz) {
    //   parent.location.href="http://DeineDomain/NameDerFramesetDatei.html
    // }

    .... xyz ist in deinen Fall 'Inhalt' und NameDerFramesetDatei wahrscheinlich index.html!

    // <frameset rows="60,*" border=0 frameborder=0 framespacing=0 .... >
    //  <frame name="xyz" src="navi.htm" .... >
    //  <frame name="FrameInDasDeineSeiteKommenSoll" src="mainframe.htm" ..... >
    // </frameset>

    .... Aber am besten du nimmst dir diese Seite nicht zum Vorbild. Und vergisst sofort was du da gesehen hast. ;-)

    Grüsse,
    Bernhard