Orlok: Verwendung Zugriffszähler mit Onlineanzeige

Beitrag lesen

Hallo Camping_RIDER

Ob du jetzt dem onload-Attribut einen Funktionsaufruf verpasst oder hinten an den body ein <script> dranhängst bleibt sich im Endeffekt gleich - beides ist kein gutes Beispiel für unobtrusive JavaScript.

Im Ergebnis richtig, aber die Verwendung von onload ist im Vergleich viel problematischer.

Der wesentliche Grund, der gegen die Registrierung von Eventhandlern durch Zuweisung spricht, ist die hohe Fehleranfälligkeit. Programme, die diese Technik nutzen, sind nicht robust, da immer das Risiko besteht, dass die Eigenschaft an einer anderen Stelle überschrieben wird. Das gilt natürlich besonders für das Ereignis load, das von vielen Skripten als Einstiegspunkt in das Programm verwendet wird.

    <body onload="doSomething()"><script src="path/to/doSomethingElse.js"></script>
    </body>
</html>

Wird zu einem späteren Zeitpunkt ein weiteres Skript hinzugefügt, das ebenfalls einen Handler durch Zuweisung an die Eigenschaft window.onload registriert, dann wird eins der beiden Programme nicht ausgeführt. Welches das ist, hängt davon ab, in welcher Reihenfolge die Handler registriert werden. Für jemanden, der sich dieser Problematik nicht bewusst ist, ist die Fehlerursache nicht unmittelbar ersichtlich, insbesondere, wenn der Fehler erst zu einem späteren Zeitpunkt bemerkt wird.

Wenn man Eventhandler durch Eigenschaftszuweisung registriert, muss man immer genau im Blick haben, welches Skript für welches Objekt welches Event überwacht, und die konkurrierenden Zugriffe koordinieren. Das erfordert zusätzliche Logik und kann dazu führen, dass Skripte, die inhaltlich nichts miteinander zu tun haben, in Abhängigkeiten geraten. Was für manchen vielleicht zunächst wie die einfachere Lösung aussieht, ist außer in den allereinfachsten Fällen mit deutlich mehr Komplexität verbunden.

        <script>

            ⋮

            window.addEventListener('load', doSomething);

        </script>
        <script>

            ⋮

            window.addEventListener('load', doSomethingElse);

        </script>
    </body>
</html>

Die Methoden addEventListener und removeEventListener wurden eingeführt, damit sich nicht jeder seine eigene Lösung für diese Probleme stricken muss. Damit können beliebig viele Handler für dasselbe Objekt und dasselbe Ereignis registriert und wieder gelöscht werden, ohne dass es dabei zu Kollisionen kommt.

Meiner Meinung nach sollte in Lehrbeispielen zur Behandlung von Ereignissen ausschließlich diese Methoden verwendet werden – und auch im vorliegenden Fall sehe ich keinen Grund, der dagegen sprechen würde. Es mag zwar Fälle geben, in denen eine Registrierung über Attribute oder Eigenschaften unproblematisch und vielleicht sogar sinnvoll ist, aber solche Situationen zu erkennen erfordert dann doch etwas mehr Einsicht, als von der Zielgruppe eines Tutorials erwartet werden kann.

Viele Grüße,

Orlok

0 75

Verwendung Zugriffszähler mit Onlineanzeige

Christian
  • html
  • php
  1. 1
    TS
    1. 0
      Christian
      1. 0
        TS
        1. 0
          Christian
          1. 0
            TS
  2. 0
    Der Martin
    1. 0
      Camping_RIDER
      1. 0
        Der Martin
        • html
        • php
        • sprache
        1. 0
          Camping_RIDER
          1. 2
            marctrix
      2. 0
        TS
        1. 0
          Camping_RIDER
          1. 0
            Christian
            1. 0
              Camping_RIDER
              1. 5
                Orlok
                • dom
                • html
                • javascript
                1. 0
                  Camping_RIDER
                  1. 0
                    TS
                    • html
                    • javascript
                    • projekt
                    1. 1
                      Camping_RIDER
                    2. 0
                      JürgenB
                      1. 0
                        TS
                        1. 0
                          JürgenB
                          1. 0
                            TS
                            1. 0
                              JürgenB
                              1. 0
                                Camping_RIDER
                                1. 0
                                  JürgenB
                                  1. 0
                                    Christian
                                    1. 0
                                      JürgenB
                                      1. 0
                                        Christian
                                        1. 0
                                          Christian
                                          1. 0
                                            Camping_RIDER
                                            1. 0
                                              Christian
                                              1. 0
                                                Camping_RIDER
                                                1. 0
                                                  Christian
                                                  1. 1
                                                    Camping_RIDER
                                                    1. 0
                                                      Christian
                                                      1. 0
                                                        Gunnar Bittersmann
                                                        • javascript
                                                        1. 0
                                                          Christian
                                                          1. 0
                                                            Matthias Apsel
                                                2. -1
                                                  Christian
                                                  1. 1
                                                    Camping_RIDER
                                  2. 0
                                    Camping_RIDER
                                    1. 0
                                      JürgenB
                                    2. 6
                                      Orlok
                                      • dom
                                      • html
                                      • javascript
                    3. 8
                      Orlok
                      • barrierefreiheit
                      • html
                      • javascript
                      1. 1
                        1unitedpower
                        1. 0
                          Gunnar Bittersmann
                          • html
                          • javascript
                          • php
                          1. 0
                            Orlok
                            1. 2
                              Orlok
                              • html
                              • javascript
                              • programmiertechnik
                          2. 0
                            1unitedpower
                      2. -1
                        marctrix
                        1. 4
                          1unitedpower
                          • mysql
                          • php
                          • wiki
                          1. 0
                            Matthias Scharwies
                        2. 0
                          Gunnar Bittersmann
                          1. 1
                            marctrix
                            1. 1
                              marctrix
                            2. 1
                              Gunnar Bittersmann
                              1. 0
                                marctrix
                                1. 0
                                  JürgenB
                                  1. 0
                                    marctrix
                                    1. 1
                                      Camping_RIDER
                                      1. 0
                                        Der Martin
                                        1. 1
                                          Camping_RIDER
                                          1. 0
                                            Der Martin
                                            1. 1
                                              Camping_RIDER
                                    2. 0
                                      Gunnar Bittersmann
                                      1. 3
                                        Matthias Scharwies
                                        1. 1
                                          TS
                                          1. 0
                                            Matthias Scharwies
                                          2. 0
                                            Camping_RIDER
                                            1. 0
                                              Felix Riesterer
                                            2. 0
                                              TS
                                              • html
                                              • javascript
                                              • php
                                      2. 0
                                        marctrix
                                        1. 1
                                          Matthias Apsel
                                          1. 0
                                            marctrix