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).