Enrico: Ladehinweis nach Seitenaufruf / globale Variablen

Hallo,

Um quasi globale Variablen definieren und verwenden zu können, habe ich ein Frameset aus folgenden zwei Frames erstellt:

[1] frm_variablen
[2] frm_container

Zu [1]
In diesen Frame der Grösse 0 (unsichtbar) wird die Datei "HTML_S_variablen.html" geladen, die die externe Datei "JS_variablen.js" einbindet. Diese Javascript-Datei enthält u.a. eine umfangreiche Browserabfrage und folgende Funktionen:

function ebene_initialisieren(name)
{
  if (ns4 || ns5 || ns6 || ns7)
  {
    ie = true;
    return(objekt = eval("document."+name));
  }
  else
  {
    if (ie4 || ie5 || ie5_5 || ie6)
    {
      ns = true;
      return(objekt = eval("document.all."+name+".style"));
    }
  }
}

function ebene_zeigen(name)
{
  ebene_initialisieren(name);
  if(ns)
    objekt.visibility="show";
  if(ie)
    objekt.visibility="visible";
}

function ebene_verbergen(objekt)
{
  ebene_initialisieren(name);
  if(ns)
    objekt.visibility="hide";
  if(ie)
    objekt.visibility="hidden";
}

Zu [2]
In diesem Frame wird das Layout unserer Homepage aufgebaut.

Während Seiten geladen werden, soll ein Ladehinweis dargestellt werden. Dies geht ja - theoretisch - ganz leicht über Ein- und Ausblenden von Ebenen.

Ich habe aber festgestellt, dass die Initialisierung von Ebenen etwas umfangreicher ausfällt.

Bei mir sieht es folgendermassen aus:

ANZUZEIGENDE DATEI:

<html>
  <head>
    <style type="text/css">
      <!--
        #ladehinweis {width: 100%; height: 100%; border: 0px}
      //-->
    </style>
  </head>
  <body onload="ebene_initialisieren('ladehinweis')" [...]>
    <div id="ladehinweis">
      [...]
    </div>
    <script language="javascript" type="text/javascript">
      <!--
        parent.frm_variablen.ebene_zeigen("ladehinweis");
      //-->
    </script>
    [...]
    [...] Eigentlicher Seiteninhalt
    [...]
    <script language="javascript" type="text/javascript">
      <!--
        parent.frm_variablen.ebene_verbergen("ladehinweis");
      //-->
    </script>
  </body>
</html>

Nun zu meinen Fragen:

(1) Habe ich die anzuzeigende bzw. zu verbergende Ebene mit diesen Funktionen richtig initialisiert ?
(2) Ist der Aufruf der Funktionen "ebene_zeigen" und "ebene_verbergen" so richtig, wie ich ihn definiert habe ?

Vielen, vielen Dank im Voraus für Ihre Bemühungen.
Gruss, Enrico

  1. Moin!

    Was mir beim lesen aufgefallen ist:

    Zu [1]
    In diesen Frame der Grösse 0 (unsichtbar) wird die Datei "HTML_S_variablen.html" geladen, die die externe Datei "JS_variablen.js" einbindet.

    Das ist zwar nicht "falsch" aber auch nicht "ganz richtig", weil inperformant.
    Du lädst ein Frameset, dieses Dateien, von denen eine (HTML_S_variablen.html) nur eine weitere (JS_variablen.js) nachlädt. Why? (Norddeutsch: tut dat not?)

    Zu Deinen anderen Fragen:
    Der Aufruf einer Funktion in einem anderen Frame (das ist laut Glaskugel Deine Frage...) ist hier beschrieben: http://selfhtml.teamone.de/javascript/objekte/frames.htm#scripts

    Prinzip: Variable = parent.FrameName.funktion(parameterliste)   oder:
             Variable = top.FrameName.funktion(parameterliste)

    Das hast Du zwar gemacht, aber in einer Zeile vergessen:

    <body onload="ebene_initialisieren('ladehinweis')" [...]>

    Vielen, vielen Dank im Voraus für Ihre Bemühungen.

    UPS! Wir sind hier zwar höflich, übertreiben es aber gewöhnlich nicht. Ich komme, Du kommst auch mit dem "Du" klar.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Moin fastix und alle Mitstriter,

      Why? (Norddeutsch: tut dat not?

      Gut, das habe ich nun geändert :-)
      Der Javascript-Code ist nun vollständig im Body der Datei "HTML_S_variablen.html" eingebunden.

      Der Ladehinweis wird auch schön brav angezeigt, aber nicht mehr entfernt *wunder*

      Warum ist das so ?

      Gruss, Enrico

      1. Moin!

        Hm... Mal das Debugging Deines Browsers benutzt um zu einer aussagekräftigeren Fehlermeldung als "geht nicht" zu kommen?

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Moin!

          Ah! Ich sehe es gerade:
          Ich nehme mal Deine Funktion und kommentiere diese:

          function ebene_initialisieren(name)
          {
            if (ns4 || ns5 || ns6 || ns7)
            {
             // Deine umfangreiche Browserabfrage ermittelt womöglich einen Netscape / Mozilla
              ie = true;
              // Wieso ist ie dann true???
              return(objekt = eval("document."+name));
            }
            else
            {
              if (ie4 || ie5 || ie5_5 || ie6)
                 // Deine umfangreiche Browserabfrage ermittelt womöglich einen IE
              {
                ns = true;
                // Wieso ns dann true?
                return(objekt = eval("document.all."+name+".style"));
              }
            }
          }

          Du hast also die Variablen ie, ns vertauscht.

          Zweitens:
          Die Mozillas / Netscapes teilweise der IE verhalten sich W3C- konform:
          Netscape 4 und die IE's kennen kennen noch ein eigenses Modell, wober die IE mal wieder doppeldeutig sind, die verstehen das neue (W3C) und das alte aus dem 4er. Auf Grund des Wirrwars hat es sich als besser herausgestellt, direkt zu prüfen, ob es das Objekt gibt und die Eigenschaft kennt.

          Netscape 4:
          document.ELEMENT.visibility="hide";

          IE4:
          document.all.ELEMENT.style.visibility="hidden";

          IE5, Mozilla, Netscape, Opera, Konquereor...
          document.getElementById('ELEMENT').style.visibility="hidden";

          function ebene_anzeigen(element, sichtbar) {
          // erwartet folgende Parameter:
          // element: name (Netscape4) oder ID (IE, Mozilla)
          // sichtbar: 0 -> verbergen; 1 -> zeigen

          // W3C:
            if documentGetElementById(element).style.visibility {
               if (sichtbar==0) {
                  documentGetElementById(element).style.visibility="hidden";
               } else {
                  documentGetElementById(element).style.visibility="visible";
               }
               return;
            }

          // IE4
            objekt = eval("document."+element));
            if document.all."+element+".style
            if (objekt.visibility) {
               if (sichtbar==0) {
                  objekt.visibility="hidden";
               } else {
                  objekt.visibility="visible";
               }
               return;
            }

          // Netscape 4.x:
            objekt = eval("document."+element));
            if (objekt.visibility) {
               if (sichtbar==0) {
                  objekt.visibility="hide";
               } else {
                  objekt.visibility="show";
               }
               return;
            }
          }

          Ich vermute nicht, daß das Skript wirklich fehlerfrei ist... ich habe das "blind" geschrieben.

          Alternierend lohnt sich auch das Benutzen (und vor allem das Lesen) von:
          http://selfhtml.teamone.de/dhtml/beispiele/dhtml_bibliothek.htm

          Grund: Deine Unterlage ist wohl "etwas" veraltet und Deine Skripte dürften Probleme mit einer großen Zahl moderner Browser haben, unterstützen aber Urgesteine a la NS4, IE4, die mittlerweile seltener vorkommen als moderne "Nicht-IE's"

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          --
          Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.