[Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event.

  • Affected Version
    WoltLab Suite 5.4

    In WS 5.3.10 und 5.4 RC2 erscheinen beim Aufruf von Content in der Browserkonsole folgende Meldung:


    Auch hier z. B. beim Lesen von Beiträgen im Forum, von "Blog"-Einträgen oder Einträgen im Plugin-Shop.

    Eigentlich kein Fehler, der die Funktion beeinträchtigt, aber unschön.


    lg,

    Chris

    • Official Post

    Das lässt sich nicht beheben, diese entstammen dem WYSIWYG-Editor. Auch wenn jQuery einem eine einfache API vorgaukelt, gibt es bei Event-Listener eine tückische Eigenheit: Zum Entfernen eines Event-Listener müssen die identischen Parameter angegeben werden.


    JavaScript
    const callback = () => {};
    someElement.addEventListener("click", callback, { passive: false });
    
    // Funktioniert nicht
    someElement.removeEventListener("click", callback);
    someElement.removeEventListener("click", callback, { passive: true });
    someElement.removeEventListener("click", () => {}, { passive: false });
    
    // Funktioniert
    someElement.removeEventListener("click", callback, { passive: false });


    Sobald wir also den Event-Listener beim Bind auf passiv (oder explizit als nicht-passiv) setzen, verändern wir die Signatur. Beim Entfernen des Events an anderer Stelle (auch durch Plugins) müsste diese Änderung ebenfalls berücksichtigt werden.


    Effektiv hat die Warnung in der Browser-Console einen ernsten Hintergrund, aber kann auf absehbare Zeit (wir reden hier von Jahren!) ignoriert werden (*). Würde die Warnung zu einer Fehlermeldung hochgestuft werden, würde das halbe Internet tot umfallen. Und wir haben heute noch <font> in den Browsern…



    (*) Bei allem aktuellen Code achten wir penibel darauf, Event-Listener korrekt als passiv/nicht-passiv zu deklarieren.

    • Official Post

    Ich wurde von einem User darauf hingewiesen, dass unser Forum "defekt" wäre. Überlege gerade, wie ich ihm das erklären werde ;)

    Vielleicht so, bewusst abstrakt formuliert:


    Es handelt sich um keinen Defekt, sondern um eine Empfehlung. Diese besagt, dass Vorgehen X veraltet ist und es besser ist, Vorgehen Y zu verwenden. Vorgehen X ist dennoch weiterhin akzeptabel und ohne Funktionseinbußen zulässig.