Django/Dash - инжектированный скрипт не выполняется, но ошибок нет

Я пытаюсь создать текстовую область в приложении dash, которая должна работать как окно статуса для пользователя. Обновления должны отправляться в окно через обмен сообщениями (ws, каналы, redis).

    html.Div(style={'flex': '0 0 auto', 'padding': '0px', 'boxSizing': 'border-box'}, children=[
        dcc.Textarea(
            id='log-window',
            style={'width': '100%', 'height': '400px', 'resize': 'none'},
            readOnly=True),
        html.Script("""
            console.log('logging script loaded successfully!');
            setTimeout(function() {
                var logWindow = document.getElementById('log-window');
                if (logWindow) {
                    var socket = new WebSocket('ws://127.0.0.1:8000/ws/logs/');

                    socket.onmessage = function (event) {
                        var data = JSON.parse(event.data);
                        logWindow.value += data.message + '\\n';
                    };

                    socket.onopen = function () {
                        console.log('WebSocket connection opened');
                    };

                    socket.onerror = function (error) {
                        console.error('WebSocket error:', error);
                    };

                    socket.onclose = function () {
                        console.log('WebSocket connection closed');
                    };

                } else {
                    console.error('logWindow element is null');
                };
            });
        """)
    ]),

Текстовая область создается успешно, но внедренный сверху скрипт для запуска WebSocket-соединения не выполняется. Тем не менее, скрипт виден при просмотре исходного кода в веб-браузере. Консоль не выдает никаких ошибок или подсказок. Текстовая область является частью iframe, который содержит вышеупомянутое приложение dash и позволяет выполнять скрипты.

Скрипт выполнялся, когда я включал его в view.html, но возникали проблемы с получением элемента logWindow, который всегда сообщался как null. Поэтому я включил скрипт в вышеуказанное приложение с помощью html.Script("""......"""), но здесь он не выполняется.

Я использую Firefox 129.02, Django 5.0.7, Dash 2.9.3, channels 4.1.0, channels-redis 4.2.0, python3.12. В качестве веб-сервера используется Django runserver (python manage.py runserver).

Вернуться на верх