Bernhard Peissl: Probleme beim Funktionsaufruf mit IE

Hallo

Ich habe eine JS Datei extern eingebunden, und darin befindet sich die Funktion showIntro() der eine Variable übergeben wird.

Der Aufruf in der HTML-Datei sieht folgendermassen aus:

// <body onload="javascript: showIntro('fac');">

'fac' ist die Abkürzung von faculty, und hilft mir dabei, die zugehörigen gifs für dieses Intro zu suchen. Die haben nämlich Dateinamen wie intro_fac_foto.jpg oder intro_deg_foto.jpg.

Wenn ich keine Variable übergebe, die Funktion also mit void aufrufe klappt alles. Nur wenn ich das Argument reinschreibe regt sich der IE auf: Objekt erwartet !! :-(
NS macht ausnahmsweise ;-) alles wunderbar !

Das sind so die Dinge, die mich echt aufregen, weil wahrscheinlich wieder nur irgendwo ein Leerzeichen hingehört, oder doppelte statt einfachen Gänsefüsschen, also bitte habt Mitleid und helft mir !

Schöne Grüsse,
Bernhard

  1. Hi,

    // <body onload="javascript: showIntro('fac');">

    das ist so grottenflashc. onLoad enthält per definitionem einen JavaScript-Aufruf; und wenn dieser "javascript:" lautet, dann versucht JavaScript, eben dies zu interpretieren, was natürlich nicht klappt.

    Ich nehme zwar ehrlich gesagt nicht an, daß das die Ursache für die Fehlermeldung ist, aber die dürfte im Quellcode der Funktion stecken. Bitte gib uns doch ein paar Zeilen desselben, wo das Problem Deiner Meinung nach auftaucht.

    Cheatah

    1. Hallo Cheatah

      Du schmeisst das Forum derzeit ja fast im Alleingang ;-)

      das ist so grottenflashc. onLoad enthält per definitionem einen
      JavaScript-Aufruf; und wenn dieser "javascript:" lautet, dann
      versucht JavaScript, eben dies zu interpretieren, was natürlich
      nicht klappt.

      Daran liegts nicht. Bei den anderen Dateien funktionierts wunderbar!
      Ich hab mir das einfach so angewöhnt, weil der IE oft spinnt, wenn
      ich eine JS-Funktion aufrufe, drum schreib ich immer javascript:
      davor. Hatte da noch nie Probleme! Aber du hast ja recht, schöner
      Programmierstil isses nicht!

      Hier der Code:

      function showIntro(bereich) {
        var introWin = window.open("","","height=500,width=437");
        with(introWin.document) {
           open();
           write("<html><head><title>"+titel[bereich]+"</title>\n<style>\n");
        write("img        { margin: 0px; }\n");
        write("a:link     { color: "+color[bereich]+"; text-decoration: none; }\n");
        write("a:hover    { text-decoration: underline; }\n");
        write("a.cal:link { color: black; text-decoration: underline; }\n");
        write("a.cal:hover{ color: black; text-decoration: none; }\n");
        write("a.cal:visited { color: black; text-decoration: underline; }\n");
        write(".divlinks  { position: absolute; left: 0px; top: 0px; width: 118px; height: 500px; z-index: 1; }\n");
        write(".divrechts { position: absolute; left: 118px; top: 0px; width: 319px; height: 500px; z-index: 1; }\n");
        write(".divtitel  { position: absolute; left: 130px; top: 380px; width: 300px; height: 30px; z-index: 2; }\n");
        write(".divfoto   { position: absolute; left: 337px; top: 20px; width: 100px; height: 143px; z-index: 2; }\n");
        write(".divspruch { position: absolute; left: 137px; top: 163px; width: 200px; height: 300px; z-index: 1; }\n");
        write(".divclose  { position: absolute; left: 370px; top: 470px; width: 60px; height: 30px; z-index: 2; }\n");
           write("p.titel    { font-family: Arial; font-size: 24px; font-weight: bold; }\n");
           write("p.spruch   { font-family: Arial; font-size: 10px; font-weight: bold; }\n");
           write("p.cal      { font-family: Arial; font-size: 10px; font-weight: bold; }\n");
           write("p.raus     { font-family: Arial; font-size: 12px; font-weight: bold; color: "+color[bereich]+"; }\n");
        write("</style></head>\n");
        write("<body><div class='divlinks'>\n");
        write("<img src='gifs/intro_"+bereich+"_fay.jpg' alt='Maitre Leherb (1933-1997), Australia' width='118' height='500' border='0'></div>\n");
        write("<div class='divrechts' name='background'>\n");
        write("<img src='gifs/intro_"+bereich+"_bg.jpg' width='319' height='500' border='0'></div>\n");
           // für den calender und registration gibt's keine Fotos
        if (bereich!='reg' && bereich!='cal') {
              write("<div class='divfoto' name='foto'>\n");
           write("<img src='gifs/intro_"+bereich+"_foto.jpg' width='100' height='143' border='0'></div>\n");
        }
           write("<div class='divspruch' name='spruch'>\n");
        write("<p class='spruch' align='right'>"+text[bereich]+"</p></div>\n");
           write("<div class='divtitel' name='titel'>\n");
        write("<p class='titel' align='left'>"+titel[bereich]+"</p></div>\n");
        write("<div class='divclose'><p class='raus'><a href='javascript: parent.close();'>[close]</a></p></div>\n");
        write("</body></html>");
        close();
        }
      }

      Danke,
      Bernhard

      1. Hi,

        Du schmeisst das Forum derzeit ja fast im Alleingang ;-)

        ja, ich muß meinen Wurfarm trainieren ;-)

        Daran liegts nicht. Bei den anderen Dateien funktionierts wunderbar!

        Ist trotzdem falsch.

        Hatte da noch nie Probleme! Aber du hast ja recht, schöner
        Programmierstil isses nicht!

        Nicht nur das; es erfordert eine Fehlertoleranz, die Du nicht bei jedem Browser erwarten darfst.

        function showIntro(bereich) {
          var introWin = window.open("","","height=500,width=437");

        window.open() ohne eine URL dürfte auch nur selten funktionieren. Benutze wenigstens "about:blank".

        with(introWin.document) {
             open();

        Hier kannst Du auch nicht sicher sein, daß das richtige open() genommen wird. Soweit ich weiß, steht der with-Kontext in der Prioritätenliste sogar recht weit unten.

        write("<html><head><title>"+titel[bereich]+"</title>\n<style>\n");

        Schreibe statt dessen z.B.

        var d = introWin.document;
        d.open();
        d.write(...);

        usw.

        write("img        { margin: 0px; }\n");

        Naja, ein wenig kürzen hättest Du schon können... :-/

        Cheatah

        1. Hallo Cheatah

          Ich hab den kleinen Teufel gefunden, und weisst du was es war, nicht ein fehlendes Leerzeichen oder ein falsches Gänsefüsschen, nein viel subtiler, <schimpf target="JavasSript">ein Slash zuviel !</schimpf>

          // <script language="JavaScript" src="/intro.js"></script>

          Ich hab die Datei mit "/intro.js" statt mit "intro.js" eingebunden.
          Da kann man sich echt grün und blau ärgern! Aaaaarrrrgghhhhhh!!!!!
          <zaehneknirschen />

          Mich wunderts bloss, dass Netscape das geschluckt hat ;-)

          Hatte da noch nie Probleme! Aber du hast ja recht, schöner
          Programmierstil isses nicht!
          Nicht nur das; es erfordert eine Fehlertoleranz, die Du nicht bei
          jedem Browser erwarten darfst.

          Jaja, weiss schon, Freund Netscape, drum lieb ich ihn ja so ;-(

          function showIntro(bereich) {
            var introWin = window.open("","","height=500,width=437");
          window.open() ohne eine URL dürfte auch nur selten funktionieren.
          Benutze wenigstens "about:blank".

          Wieso, wenn nix drin steht wird ja per default ein about:blank aufgemacht, oder?

          write("<html><head><title>"+titel[bereich]+"</title>\n<style>\n");
          Schreibe statt dessen z.B.
          var d = introWin.document;
          d.open();
          d.write(...);

          Das issn guter Tip. Dieses Javascript, überhaupt diese ganzen
          Scriptsprachen, da wundere ich mich jedesmal wieder, was da alles
          geht [aber nur selten auch funktioniert ;-)] Da werden ganze Fenster
          auf eine Variable zugewiesen, na wenn das nicht krank ist!

          write("img { margin: 0px; }\n");
          Naja, ein wenig kürzen hättest Du schon können... :-/

          Sorry, tut mir leid !

          Trotzdem danke für deine Mühe,
          Bernhard

          1. Hi,

            // <script language="JavaScript" src="/intro.js"></script>

            Ich hab die Datei mit "/intro.js" statt mit "intro.js" eingebunden.

            Mich wunderts bloss, dass Netscape das geschluckt hat ;-)

            daß Netscape und IE dies unterschiedlich interpretieren (Netscape AFAIK falsch), müßte im Archiv zu finden sein. Aber frag mich mal wo :-)

            Nicht nur das; es erfordert eine Fehlertoleranz, die Du nicht bei
            jedem Browser erwarten darfst.

            Jaja, weiss schon, Freund Netscape, drum lieb ich ihn ja so ;-(

            Nein, von Netscape rede ich hier gar nicht mal. Es gibt noch mehr Browser neben Netscape und IE, die JavaScript verstehen (oder wenigstens vorgeben, dies zu tun). Opera beispielsweise.

            Benutze wenigstens "about:blank".
            Wieso, wenn nix drin steht wird ja per default ein about:blank aufgemacht, oder?

            Nein.

            var d = introWin.document;

            Das issn guter Tip. Dieses Javascript, überhaupt diese ganzen
            Scriptsprachen, da wundere ich mich jedesmal wieder, was da alles
            geht [aber nur selten auch funktioniert ;-)] Da werden ganze Fenster
            auf eine Variable zugewiesen, na wenn das nicht krank ist!

            Das ist nicht krank, sondern objektorientiert :-)

            Cheatah