From ba08220ec5081652a3c614c658ea90c2f4f0d559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesko=20Ansch=C3=BCtz?= Date: Thu, 26 Mar 2026 13:04:44 +0100 Subject: [PATCH] fix(player): resize-Event nach iframe-Einblenden feuern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JS-lastige Seiten (z.B. WebUntis) führen Layout-Berechnungen aus während der iframe noch display:none hat (offsetWidth=0). Ein resize-Event nach der Opacity-Transition triggert einen Neu-Layout. Co-Authored-By: Claude Sonnet 4.6 --- player/agent/internal/playerserver/server.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/player/agent/internal/playerserver/server.go b/player/agent/internal/playerserver/server.go index e20ba1c..cae5a51 100644 --- a/player/agent/internal/playerserver/server.go +++ b/player/agent/internal/playerserver/server.go @@ -464,7 +464,19 @@ const playerHTML = ` if (frame.src !== item.src) { frame.src = item.src; } frame.style.display = 'block'; requestAnimationFrame(function() { - requestAnimationFrame(function() { frame.style.opacity = '1'; }); + requestAnimationFrame(function() { + frame.style.opacity = '1'; + // Nach der Opacity-Transition (500ms) einen Resize-Event feuern, + // damit JS-basierte Layouts (z.B. WebUntis) neu berechnen. + // Der iframe ist jetzt sichtbar (offsetWidth > 0). + setTimeout(function() { + try { + frame.contentWindow.dispatchEvent(new Event('resize')); + } catch (e) { + // CORS-Fehler bei cross-origin iframes ignorieren. + } + }, TRANSITION_MS); + }); }); // Fehler-Fallback wenn iframe-Laden fehlschlägt (z.B. X-Frame-Options).