Sprint 12: document.currentScript während Script-Execution #68

Closed
opened 2026-06-18 16:17:57 +00:00 by Artur · 0 comments
Owner

Sprint 12 — document.currentScript Implementierung

Status: Implementiert (Teil von Sprint 12)

Problembeschreibung

document.currentScript war während der Script-Execution immer null. Im Browser zeigt dieses Property auf das <script>-Element, dessen Code gerade ausgeführt wird. Es wird von Polyfills und Skript-Ladern (z.B. Webpack) verwendet, um das aktuelle Skript zu identifizieren.

Die Grund-Infrastruktur (__currentScript auf Window + Getter auf document) existierte bereits in runtime-isolation.ts (Sprint 10) und wurde von dynamic-scripts.ts für dynamisch nachgeladene Skripte genutzt. Fehlend war die Setzung bei allen anderen Execution-Pfaden: Parser Step 3, ScriptLoader.execute(), ScriptLoader.executeRaw().

Implementierung

Betroffene Dateien:

Datei Änderung
src/js/execution-realm.ts execute(code, scriptElement?) — setzt win.__currentScript vor eval(), restored nach
src/js/script-loader.ts execute() übergibt entry.element an realm; executeRaw() akzeptiert 4. Parameter element
src/dom/parser.ts Step 3 übergibt script-Element an executeRaw()

Ablauf:

  1. Vor jedem eval(code) wird win.__currentScript = scriptElement gesetzt
  2. Nach eval() wird der vorherige Wert restored (wie Browser: setzen bei Script-Start, null nach Ende)
  3. Scripts ohne Element (z.B. Fallback-Pfad) → __currentScript = null

Tests

10 Unit-Tests in tests/unit/sprint12-current-script.test.ts:

  • document.currentScript ist null vor Script-Execution
  • Zeigt auf scriptElement während Execution
  • Ist nach Execution wieder null
  • Korrekte src und type
  • Null bei execute() ohne Element
  • Inline script execution
  • Nested execution (restore)
  • Sequentielle executions mit verschiedenen Elementen
  • Polyfill-ähnlicher Code
  • execute() mit Element (dynamic-scripts.ts Pfad)

Verifikation

✅ 10 pass, 0 fail
✅ 0 Regression (alle vorherigen Tests grün)
## Sprint 12 — document.currentScript Implementierung **Status:** ✅ Implementiert (Teil von Sprint 12) ### Problembeschreibung `document.currentScript` war während der Script-Execution immer `null`. Im Browser zeigt dieses Property auf das `<script>`-Element, dessen Code gerade ausgeführt wird. Es wird von Polyfills und Skript-Ladern (z.B. Webpack) verwendet, um das aktuelle Skript zu identifizieren. Die Grund-Infrastruktur (`__currentScript` auf Window + Getter auf `document`) existierte bereits in `runtime-isolation.ts` (Sprint 10) und wurde von `dynamic-scripts.ts` für dynamisch nachgeladene Skripte genutzt. **Fehlend war die Setzung bei allen anderen Execution-Pfaden:** Parser Step 3, ScriptLoader.execute(), ScriptLoader.executeRaw(). ### Implementierung **Betroffene Dateien:** | Datei | Änderung | |-------|----------| | `src/js/execution-realm.ts` | `execute(code, scriptElement?)` — setzt `win.__currentScript` vor eval(), restored nach | | `src/js/script-loader.ts` | `execute()` übergibt `entry.element` an realm; `executeRaw()` akzeptiert 4. Parameter `element` | | `src/dom/parser.ts` | Step 3 übergibt script-Element an `executeRaw()` | **Ablauf:** 1. Vor jedem `eval(code)` wird `win.__currentScript = scriptElement` gesetzt 2. Nach eval() wird der vorherige Wert restored (wie Browser: setzen bei Script-Start, null nach Ende) 3. Scripts ohne Element (z.B. Fallback-Pfad) → `__currentScript = null` ### Tests 10 Unit-Tests in `tests/unit/sprint12-current-script.test.ts`: - `document.currentScript` ist null vor Script-Execution - Zeigt auf scriptElement während Execution - Ist nach Execution wieder null - Korrekte src und type - Null bei execute() ohne Element - Inline script execution - Nested execution (restore) - Sequentielle executions mit verschiedenen Elementen - Polyfill-ähnlicher Code - execute() mit Element (dynamic-scripts.ts Pfad) ### Verifikation ``` ✅ 10 pass, 0 fail ✅ 0 Regression (alle vorherigen Tests grün) ```
Artur closed this issue 2026-06-18 16:18:40 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
glow-all/true-headless-browser#68
No description provided.