Frank: Script funzt in Opera und Mozilla nicht ...

Hallo zusammen,

folgende Scripts habe ich über eine ausgelagerte JS-Datei via <script src="home.js" type="text/javascript" language="JacaScript"></script> eingebunden:

<!--

/* Funktionen für die Rollovers der Navigation */

if (document.images) {
  image1 = new Image;
  image1a = new Image;
  image1.src = 'navigation/subject_a.gif';
  image1a.src = 'navigation/subject_b.gif';
  image2 = new Image;
  image2a = new Image;
  image2.src = 'navigation/impressionen_a.gif';
  image2a.src = 'navigation/impressionen_b.gif';
  image3 = new Image;
  image3a = new Image;
  image3.src = 'navigation/inspiration_a.gif';
  image3a.src = 'navigation/inspiration_b.gif';
  image4 = new Image;
  image4a = new Image;
  image4.src = 'navigation/guestbook_a.gif';
  image4a.src = 'navigation/guestbook_b.gif';
  image5 = new Image;
  image5a = new Image;
  image5.src = 'navigation/kontakt_a.gif';
  image5a.src = 'navigation/kontakt_b.gif';
}
else {
  image1 = '';
  image1a = '';
  image2 = '';
  image2a = '';
  image3 = '';
  image3a = '';
  image4 = '';
  image4a = '';
  image5 = '';
  image5a = '';
  document.rollimg = '';
  document.rollimg1a = '';
  document.rollimg2a = '';
  document.rollimg3a = '';
  document.rollimg4a = '';
  document.rollimg5a = '';
}

/* Funktion für die Änderung der visibility von Layern © Eddie Traversa (nirvana.media3.net) */

function toggleVisibility(id, NNtype, IEtype, WC3type) {
    if (document.getElementById) {
        eval("document.getElementById(id).style.visibility = "" + WC3type + """);
    } else {
        if (document.layers) {
            document.layers[id].visibility = NNtype;
        } else {
            if (document.all) {
                eval("document.all." + id + ".style.visibility = "" + IEtype + """);
            }
        }
    }
}

//-->

Und hier ein Beispiel-Link aus der Seite:

<a href="test.html" onmouseover="document.rollimg1a.src=image1a.src;toggleVisibility('home14','show','visible','visible');" onmouseout="document.rollimg1a.src=image1.src;toggleVisibility('home14','hidden','hidden','hidden');">

Die Skripte laufen in NN 4.7X, NN 6, NN7 und MS IE wunderbar - nur Opera und Mozilla wollen nicht (allerdings auch keine JS-Fehlermeldung).

Vermute, dass ich beim zweiten Skript die Browseridentifizierung modifizieren muß - aber wie ?

Gruß und Damk im Voraus :o)

Frank

  1. hi,

    if (document.images) {
      image1 = new Image;
      image1a = new Image;
      image1.src = 'navigation/subject_a.gif';
      image1a.src = 'navigation/subject_b.gif';
      image2 = new Image;

    warum postest Du uns die gesamte, irrelevante Bildladerei?

    /* Funktion für die Änderung der visibility von Layern © Eddie Traversa (nirvana.media3.net) */

    Du solltest Eddie bei Gelegenheit fragen wozu er hier mit eval auf ein bisschen Layergewechesl ballert.

    function toggleVisibility(id, NNtype, IEtype, WC3type) {
        if (document.getElementById) {
            eval("document.getElementById(id).style.visibility = "" + WC3type + """);

    Die Unterscheidung "show" und "visible" ist afaik heutzutage ueberfluessig. Irgendwelche fruehen NC 4 Versionen hatten da angeblich Probleme, mir ist keine untergekommen, und zumindestens am Pc habe ich alle ab 4.0.1 getested.
    darf ich Dir was simpleres anbieten?

    // eventuellen Zeilenumbruch rausnehmen!!!

    Das brauchst Du zum Layerreferenzieren:
    function dRefS(num) {return (document.layers? document.layers[num] : (document.all? document.all[num].style : document.getElementById(num).style))}

    // eventuellen Zeilenumbruch rausnehmen!!!

    das zu Wechsel:
    function dplDiv(id,stat) {dRefS(id).visibility = stat? "visible" : "hidden";}

    und so rufst Du es auf:
    <a href="test.html" onmouseover="document.rollimg1a.src=image1a.src;dplDiv('home14',1);" onmouseout="document.rollimg1a.src=image1.src;dplDiv('home14',0);">

    Die Bildwechselgeschichte wuerde ich zwengs der Uebersichtlichkeit auch in eine Funktion auslagern.

    Gruesse  Joachim

  2. Hallo Frank,

    Die Skripte laufen in NN 4.7X, NN 6, NN7 und MS IE wunderbar - nur Opera und Mozilla wollen nicht (allerdings auch keine JS-Fehlermeldung).

    Das ist komisch: wenn es in NN6 und NN7 läuft, müßte es auch im Mozilla laufen, ist ja fast derselbe Browser.

    Vermute, dass ich beim zweiten Skript die Browseridentifizierung modifizieren muß - aber wie ?

    Nee, so wie die Funktion programmiert ist, müßte sie auch in Opera 6 und Mozilla laufen. Die Browserweiche ist genau richtig gemacht.

    Der Fehler muß woanders liegen.

    Gruß,
    apstrakt

  3. /* Funktion für die Änderung der visibility von Layern © Eddie Traversa (nirvana.media3.net) */

    function toggleVisibility(id, NNtype, IEtype, WC3type) {
        if (document.getElementById) {
            eval("document.getElementById(id).style.visibility = "" + WC3type + """);
        } else {
            if (document.layers) {
                document.layers[id].visibility = NNtype;
            } else {
                if (document.all) {
                    eval("document.all." + id + ".style.visibility = "" + IEtype + """);
                }
            }
        }
    }

    Übel übel, warum die evals? Es ist absolut unnötig.

    function toggleVisibility(id, NNtype, IEtype, WC3type) {

    if (document.getElementById)
          document.getElementById(id).style.visibility = WC3type;
    else if (document.layers)
          document.layers[id].visibility = NNtype;
    else  if (document.all)
          document.all[id].style.visibility = IEtype;
    }

    Ansonsten sehe ich keinen Fehler.

    Struppi.

  4. Hallo zusammen,

    wenn ich gem. des Vorschlags von Struppi mit einer verschlangten Browser-Abfrage (also ohne eval) arbeite, ist das Problem nach wie vor vorhanden.

    Selbiges gilt bei dem Vorschlag von Joachim. Egal, welche der drei Varianten (meine ursprüngliche, die von Struppi oder Joachims) ich verwende, in Opera und Mozilla tut sich nix.

    Wenn ich bei onmouseover und -out nur die Funktionen für die Änderung der Layer-Sichtbarkeit (die ursprüngliche oder Joachims) aufrufe, funzt es in Opera und Mozilla ebenfalls nicht. Die Funktion für den Bildwechsel alleine funzt in allen Browsern.

    Ich weiß auch nicht mehr weiter :o(

    Gruß

    Frank

  5. Hallo Jungs,

    wie (leider) fast immer beim Thema JS steckte der Fehlerteufel in einem kleinen Detail:

    <script src="home.js" type="text/javascript" language="JacaScript"></script>

    JacaScript gibts natürlich nicht. Also schnell gegen JavaScript ausgetauscht und alles war wunderbar !

    Gruß :o)

    Frank