Cannot read properties of undefined (reading 'add')

  • Affected Version
    WoltLab Suite 5.5
    Affected App
    WoltLab Suite Core

    Fehler:

    Code
    Uncaught TypeError: Cannot read properties of undefined (reading 'add')
        at Object.addListener (WCF.js?v=1659512092:5287:39)
        at g.init (WCF.Message.js?v=1659512092:1206:21)
        at new g (WCF.Assets.js?v=1659512092:7:162)
        at ?action=firstNew:3863:21
        at ?action=firstNew:3885:12

    Betroffene Zeile:



    Ausgelöst durch:


    JavaScript
    var $quoteManager = new WCF.Message.Quote.Manager(0, 'text', true, [  ]);

    Den Fehler bekomme ich manchmal im Ticketsystem auf der Ticket-Seite. Eingebunden wurden der auslösende Code einfach mit {include file='__messageQuoteManager' wysiwygSelector='text'} im ticket.tpl


    Wieso ist window.__wcf_bc_eventHandler beim ersten Aufruf durch das Ticketsystem NULL, aber beim nächsten Aufruf (z.B, durch die Shoutbox auf derselben Seite) ist es dann gesetzt? Ich dachte schon an ein Timing-Problem, weswegen ich noch ein window.addEventListener('load', () => { rumgebaut habe. Leider ohne Erfolg.


    Ich freue mich auf euer Feedback.


    Viele Grüße,

    Daniel

    • Official Post

    Ich habe mir die Meldung noch nicht im Detail angesehen. Meine Vermutung wäre aber, dass dein Code-Aufruf nicht in einem $(function() { /* … */ })-Block steht.

  • Alexander Ebert

    Danke für deine erste Einschätzung.


    Sowohl...

    Code
    <script data-relocate="true">
        window.addEventListener('load', () => {
            {include file='__messageQuoteManager' wysiwygSelector='text'}
        });
    </script>


    ...als auch...


    Code
    <script data-relocate="true">
        (function() {
            {include file='__messageQuoteManager' wysiwygSelector='text'}
        });
    </script>


    ...führen zum selben Problem.

  • Folgendes sollte helfen :)

    HTML
    <script data-relocate="true">
        require(['WoltLabSuite/Core/Bootstrap'], function(Bootstrap) {
            {include file='__messageQuoteManager' wysiwygSelector='text'}
        });
    </script>

    Siehe dazu

    WCF/__wysiwygFormField.tpl at c29b75e0e43c5680f7d4182325b5958902997661 · WoltLab/WCF
    WoltLab Suite Core (previously WoltLab Community Framework) - WCF/__wysiwygFormField.tpl at c29b75e0e43c5680f7d4182325b5958902997661 · WoltLab/WCF
    github.com

  • Sind nicht das, was ich schrieb. $(function () { /* … */ }) (oder $(() => { /* … */ })) sind jeweils der Callback von jQuery. Die Ausführung von jQuery wird gezielt verzögert und findet erst nach DOMContentLoaded statt.

    Ich entferne bewusst jede Art von jQuery. (auf eure Empfehlung)


    Ist die Variante von Cyperghost also die von WoltLab empfohlene?

    • Official Post

    Ich entferne bewusst jede Art von jQuery. (auf eure Empfehlung)

    Ja, das ist auch in Ordnung, es handelt sich aber bei diesem spezifischen Teil noch um eine jQuery-Komponente.


    Ist die Variante von Cyperghost also die von WoltLab empfohlene?

    Nein, denn das ist zu spezifisch von der konkreten Implementierung abhängig. Sinnvoller wäre es, diesen spezifischen Teil explizit in einem $(() => { /* … */ });-Block einzubinden, denn dessen Verhalten ist wohldefiniert.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!