WauWau: Browser spielen bei Ereignisüberwachung verrückt...

Hallo,

ich habe den folgenden, ganz ganz simplen Script:

--------------------------------------------------------------------
/*
 *  WauWauWebserver4 JavaScripts
 *  Modern Design Main Script
 *
 */

if(document.layers || navigator.userAgent.indexOf("MSIE") == -1) {
  document.captureEvents(Event.LOAD); }

document.onload = siteloaded;

function siteloaded() {
  alert("Seite wurde geladen");
}
--------------------------------------------------------------------

Was passiert?

- IE (6): Gar nichts
  - Opera (7.25): Das, was passieren soll: Das alert() erscheint
  - Mozilla (1.6): Der Browser spielt verrückt, lädt nur rum
    und zeigt die Seite nicht an
  - Netscape 4: Das alert wird 4x aufgerufen
  - Netscape 6: Gar nichts passiert
  - Netscape 7: Handelt wie Mozilla 1.6

Super, nicht wahr? Mozilla sowie Netscape spielen auch verrückt, wenn ich den Script nicht einbinde, keine Ahnung woran es liegt (vielleicht an dem gutbenutzen CSS ? ;)

Na schön, um Mozilla muss ich mich also mal gesondert kümmern, aber momentan gilt meine Aufmerksamkeit dem Sorgenkind IE. Wieso ruft dieser nicht die Funktion siteloaded() beim Aufruf der Seite auf? So kompliziert ist es doch wirklich nicht ;-)

WauWau

--
ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
E-Mail WauWau: mailto:selfforum.wauwau@spameater.org
  1. Hallo WauWau,

    document.onload = siteloaded;

    Wie wäre es mit

    document.onload = siteloaded();

    Freundliche Grüsse,

    Vinzenz

    1. Moin!

      document.onload = siteloaded;

      Wie wäre es mit

      document.onload = siteloaded();

      Das wäre schlecht. Wauwaus Methode ist da schon grundsätzlich korrekt.

      - Sven Rautenberg

      1. Hallo Sven,

        document.onload = siteloaded;
            document.onload = siteloaded();
        Das wäre schlecht. Wauwaus Methode ist da schon grundsätzlich korrekt.

        ok, mehr dazu hast du ja in [pref:t=78416&m=453357] geschrieben, doch meine Methode funktioniert ja nicht ...!?

        WauWau

        --
        ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
        E-Mail WauWau: mailto:selfforum.wauwau@spameater.org
    2. Hallo Vinzenz,

      document.onload = siteloaded;
          document.onload = siteloaded();

      danke, es geht 8]

      Kooooomisch, ich bin sehr verwundert. Denn molily schrieb in [pref:t=78275&m=453089], dass es ohne () geschrieben werden soll!?

      WauWAu

      --
      ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
      E-Mail WauWau: mailto:selfforum.wauwau@spameater.org
      1. Moin!

        document.onload = siteloaded;
            document.onload = siteloaded();

        danke, es geht 8]

        Sicher?

        Wann rufst du dein Script denn eigentlich auf? Denn wenn der <body>, dem man ja üblicherweise das onload-Attribut zuweist, noch nicht komplett geladen ist, würde ich meinen, kann man nicht durch die Hintertür ohne Attribut einen Eventhandler zuweisen.

        Das, was bei dir jetzt passiert: Zur Zuweisung eines Eventhandlers wird die Funktion aufgerufen. Das sieht dann so aus, als ob "es" funktioniert, weil die Funktion ja eigentlich sowieso aufgerufen werden soll - aber die Frage ist: Wann passiert das?
        Hier: Zum Zeitpunkt der Zuweisung.
        Gewünscht: Zum Zeitpunkt "onload", also beim Fertigladen des Dokuments.

        - Sven Rautenberg

        1. Moin Sven,

          Sicher?

          Hmm, ich habe das "es geht" jetzt mal daran festgemacht, dass das alert() erschienen ist. Aber stimmt, der gibt das alert() aus, also ruft die Funktion auf, bevor onLoad überhaupt eintreten würde/eingetreten ist (opera verdeutlicht das besonders stark ;).

          Wann rufst du dein Script denn eigentlich auf?

          Es ist als .js-Datei gespeichert und ganz einfach per <script> in den Head eingebunden.

          Denn wenn der <body>, dem man ja üblicherweise das onload-Attribut zuweist, noch nicht komplett geladen ist, würde ich meinen, kann man nicht durch die Hintertür ohne Attribut einen Eventhandler zuweisen.

          Wie? Also ich meine, wie oder wo soll man denn ansonsten hier mit dem Ereignisüberwachen anfangen, wenn nicht im globalen Scriptraum?

          Das, was bei dir jetzt passiert: Zur Zuweisung eines Eventhandlers wird die Funktion aufgerufen. Das sieht dann so aus, als ob "es" funktioniert, weil die Funktion ja eigentlich sowieso aufgerufen werden soll - aber die Frage ist: Wann passiert das?
          Hier: Zum Zeitpunkt der Zuweisung.
          Gewünscht: Zum Zeitpunkt "onload", also beim Fertigladen des Dokuments.

          Stimmt, du hast recht (wie bereits gesagt).

          Kleine Frage: Hast du eine Idee, wie ich es sonst fabrizieren könnte?

          WauWau

          --
          ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
          E-Mail WauWau: mailto:selfforum.wauwau@spameater.org
          1. Moin!

            Wann rufst du dein Script denn eigentlich auf?

            Es ist als .js-Datei gespeichert und ganz einfach per <script> in den Head eingebunden.

            Schlecht. Im Head existiert von dem document zum Ladezeitpunkt des Javascripts doch noch so gut wie gar nichts. Pack das Skript mal an das Ende vom Body, vielleicht auch noch dahinter.

            Im Zweifel versuchst du es einfach mal auf die triviale Weise: Testseite mit onload-Attribut im Body nehmen - und dann mal im Head, im Body und nach dem Body mit alert(document.onlod) bestimmen, wann das Attribut mit Wert gefüllt wird.

            - Sven Rautenberg

            1. Hallo Sven,

              Im Head existiert von dem document zum Ladezeitpunkt des Javascripts doch noch so gut wie gar nichts.

              jo, deswegen werden auch alle initialisierungsprozesse erst in der Funktion gemacht, die bei onLoad aufgerufen werden soll.

              Pack das Skript mal an das Ende vom Body, vielleicht auch noch dahinter.

              Das werde ich mal ausprobieren 8]

              Im Zweifel versuchst du es einfach mal auf die triviale Weise: Testseite mit onload-Attribut im Body nehmen - und dann mal im Head, im Body und nach dem Body mit alert(document.onlod) bestimmen, wann das Attribut mit Wert gefüllt wird.

              ok, das werde ich auch machen :)

              danke,
              WauWau

              --
              ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
              E-Mail WauWau: mailto:selfforum.wauwau@spameater.org

  2. /*
    *  WauWauWebserver4 JavaScripts
    *  Modern Design Main Script
    *
    */

    if(document.layers || navigator.userAgent.indexOf("MSIE") == -1) {
      document.captureEvents(Event.LOAD); }

    document.onload = siteloaded;

    function siteloaded() {
      alert("Seite wurde geladen");
    }

    es geht bei mir in allen Browsern auch ohne captureEvents, wenn ich das onload dort setzte wo es Auftritt, im window.

    function load()
    {
    alert('Fertig');

    }
    window.onload = load;

    (im head)

    MZ 1.6
    IE 6
    OP 7.11
    NC 4.5

    Struppi.

    1. Hallo Struppi,

      es geht bei mir in allen Browsern auch ohne captureEvents, wenn ich das onload dort setzte wo es Auftritt, im window.

      function load()
      {
      alert('Fertig');

      }
      window.onload = load;
      (im head)
      NC 4.5

      hmmm, ich dachte, NS4 (wieso NC4...?) würde dieses captureEvents für seine komische Sache brauchen....!? Naja, ich werde es auch einmal ausprobieren - danke für den tip 8]

      WauWau

      --
      ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
      E-Mail WauWau: mailto:selfforum.wauwau@spameater.org